文章目录
- [Jenkins + Docker + SpringCloud 微服务持续集成流程](#Jenkins + Docker + SpringCloud 微服务持续集成流程)
-
- 一、流程概述
- [二、Harbor 安装与配置](#二、Harbor 安装与配置)
-
- [1. 环境准备](#1. 环境准备)
- [2. 安装 Docker](#2. 安装 Docker)
- [3. 安装 Docker Compose](#3. 安装 Docker Compose)
- [4. 安装 Harbor](#4. 安装 Harbor)
- [5. 访问 Harbor](#5. 访问 Harbor)
- [6. 创建项目与用户](#6. 创建项目与用户)
- [三、Docker 节点配置](#三、Docker 节点配置)
-
- [1. 信任 Harbor 仓库](#1. 信任 Harbor 仓库)
- 四、微服务持续集成实现
-
- [1. 项目代码管理](#1. 项目代码管理)
- [2. Jenkins Pipeline 脚本](#2. Jenkins Pipeline 脚本)
- [3. 部署脚本 (`deploy.sh`)](#3. 部署脚本 (
deploy.sh
))
- 五、多服务器部署扩展
-
- [1. 动态选择部署目标](#1. 动态选择部署目标)
- [2. 配置文件参数](#2. 配置文件参数)
- 注意
Jenkins + Docker + SpringCloud 微服务持续集成流程
一、流程概述
- 代码提交:开发人员将代码推送至 GitLab 仓库。
- 镜像构建:Jenkins 拉取代码,编译打包为 WAR/JAR,并构建 Docker 镜像。
- 镜像推送:将镜像上传至 Harbor 私有仓库。
- 部署应用:Jenkins 通过 SSH 触发生产服务器从 Harbor 拉取镜像并启动容器。
- 用户访问:通过容器暴露的服务访问应用。
二、Harbor 安装与配置
1. 环境准备
服务器 :192.168.80.14
依赖组件:Docker、Docker Compose
2. 安装 Docker
bash
# 安装 Docker
yum install -y docker
systemctl start docker
systemctl enable docker
3. 安装 Docker Compose
bash
# 下载并安装 Docker Compose
curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose -v # 验证安装
4. 安装 Harbor
bash
# 下载并解压 Harbor
wget https://github.com/goharbor/harbor/releases/download/v1.9.2/harbor-offline-installer-v1.9.2.tgz
tar -zxvf harbor-offline-installer-v1.9.2.tgz -C /opt
cd /opt/harbor
# 修改配置文件
vim harbor.yml
---
hostname: 192.168.80.14 # 修改为当前服务器 IP
port: 85 # 修改监听端口
---
# 启动 Harbor
./install.sh
docker-compose ps # 查看服务状态
5. 访问 Harbor
- 地址 :
http://192.168.80.14:85
- 默认账户 :
admin
/Harbor12345
6. 创建项目与用户
- 新建项目 :
- 项目名称:
tensquare
- 访问级别:私有
- 项目名称:
- 创建用户 :
- 用户名:
zhangsan
- 密码:
Abc123456
- 用户名:
- 添加成员 :
- 将用户
zhangsan
添加到项目tensquare
,角色为 维护人员。
- 将用户
三、Docker 节点配置
1. 信任 Harbor 仓库
在所有 Docker 节点修改配置文件:
bash
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.80.14:85"]
}
EOF
systemctl daemon-reload
systemctl restart docker
四、微服务持续集成实现
1. 项目代码管理
- GitLab 创建项目 :
- 项目名称:
tensquare_back
- 群组:
devops_group
- 可见性:私有
- 项目名称:
- 上传代码:
bash
git clone http://192.168.80.20:82/devops_group/tensquare_back.git
cd tensquare_back
git add .
git commit -m "Initial commit"
git push -u origin master
2. Jenkins Pipeline 脚本
groovy
pipeline {
agent any
environment {
git_url = "http://192.168.80.20:82/devops_group/tensquare_back.git"
git_auth = "gitlab-auth-id" # Jenkins 中配置的 GitLab 凭据 ID
harbor_url = "192.168.80.14:85"
harbor_project_name = "tensquare"
harbor_auth = "harbor-auth-id" # Jenkins 中配置的 Harbor 凭据 ID
project_name = "tensquare-service" # 微服务项目名称
port = "8080" # 服务端口
}
stages {
// 1. 拉取代码
stage('拉取代码') {
steps {
checkout([
$class: 'GitSCM',
branches: [[name: "*/${branch}"]],
extensions: [],
userRemoteConfigs: [[
credentialsId: "${git_auth}",
url: "${git_url}"
]]
])
}
}
// 2. 编译公共子工程
stage('编译公共子工程') {
steps {
sh "mvn -f common-module clean install"
}
}
// 3. 构建镜像并推送至 Harbor
stage('构建与推送镜像') {
steps {
script {
sh "mvn -f ${project_name} clean package dockerfile:build"
def imageName = "${project_name}:latest"
sh "docker tag ${imageName} ${harbor_url}/${harbor_project_name}/${imageName}"
withCredentials([usernamePassword(
credentialsId: "${harbor_auth}",
usernameVariable: 'USERNAME',
passwordVariable: 'PASSWORD'
)]) {
sh "docker login -u ${USERNAME} -p ${PASSWORD} ${harbor_url}"
sh "docker push ${harbor_url}/${harbor_project_name}/${imageName}"
}
sh "docker rmi -f ${imageName}"
sh "docker rmi -f ${harbor_url}/${harbor_project_name}/${imageName}"
}
}
}
// 4. 部署到生产服务器
stage('部署应用') {
steps {
sshPublisher(
publishers: [
sshPublisherDesc(
configName: 'production-server', # Jenkins 中配置的 SSH 服务器名称
transfers: [
sshTransfer(
execCommand: "bash /opt/jenkins_shell/deploy.sh ${harbor_url} ${harbor_project_name} ${project_name} ${port}",
sourceFiles: 'deploy.sh' # 部署脚本上传到服务器
)
]
)
]
)
}
}
}
}
3. 部署脚本 (deploy.sh
)
bash
#!/bin/bash
harbor_url=$1
harbor_project=$2
project_name=$3
port=$4
# 拉取镜像
docker pull ${harbor_url}/${harbor_project}/${project_name}:latest
# 停止并删除旧容器
docker stop ${project_name} || true
docker rm ${project_name} || true
# 启动新容器
docker run -d --name ${project_name} -p ${port}:${port} \
${harbor_url}/${harbor_project}/${project_name}:latest
五、多服务器部署扩展
1. 动态选择部署目标
修改 stage('部署应用')
以支持多服务器:
groovy
stage('部署应用') {
steps {
script {
def selectedServers = "${publish_server}".split(",")
for (server in selectedServers) {
sshPublisher(
publishers: [
sshPublisherDesc(
configName: "${server}",
transfers: [
sshTransfer(
execCommand: "bash /opt/jenkins_shell/deploy.sh ${harbor_url} ${harbor_project_name} ${project_name} ${port}",
sourceFiles: 'deploy.sh'
)
]
)
]
)
}
}
}
}
2. 配置文件参数
- Jenkins 参数 :
branch
:代码分支(如master
、dev
)publish_server
:部署目标服务器(如master_server,slave_server
)
注意
-
凭据管理:
- GitLab 和 Harbor 的账号密码需在 Jenkins 的 凭据管理 中提前配置。
- 使用
withCredentials
安全传递敏感信息。
-
Harbor HTTPS 配置:
- 生产环境建议启用 HTTPS,修改
harbor.yml
并配置证书。
- 生产环境建议启用 HTTPS,修改
-
镜像清理:
- 构建后清理本地镜像,避免磁盘空间占用。
-
部署脚本权限:
-
确保生产服务器上的
deploy.sh
有执行权限:bashchmod +x /opt/jenkins_shell/deploy.sh
-
-
网络与防火墙:
- 确保 Jenkins、Harbor、生产服务器之间的网络互通,开放相关端口(如 85、8080)。