Jenkins + Docker + SpringCloud 微服务一连集成流程
一、流程概述
- 代码提交:开发人员将代码推送至 GitLab 堆栈。
- 镜像构建:Jenkins 拉取代码,编译打包为 WAR/JAR,并构建 Docker 镜像。
- 镜像推送:将镜像上传至 Harbor 私有堆栈。
- 部署应用:Jenkins 通过 SSH 触发生产服务器从 Harbor 拉取镜像并启动容器。
- 用户访问:通过容器暴露的服务访问应用。
二、Harbor 安装与配置
1. 环境预备
服务器:192.168.80.14
依靠组件:Docker、Docker Compose
2. 安装 Docker
- # 安装 Docker
- yum install -y docker
- systemctl start docker
- systemctl enable docker
复制代码 3. 安装 Docker Compose
- # 下载并安装 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
- # 下载并解压 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. 创建项目与用户
- 新建项目:
- 创建用户:
- 用户名:zhangsan
- 密码:Abc123456
- 添加成员:
- 将用户 zhangsan 添加到项目 tensquare,脚色为 维护人员。
三、Docker 节点配置
1. 信托 Harbor 堆栈
在全部 Docker 节点修改配置文件:
- 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
- 可见性:私有
- 上传代码:
- 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 脚本
- 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)
- #!/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('部署应用') 以支持多服务器:
- 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 并配置证书。
- 镜像清理:
- 部署脚本权限:
- 确保生产服务器上的 deploy.sh 有执行权限:
- chmod +x /opt/jenkins_shell/deploy.sh
复制代码
- 网络与防火墙:
- 确保 Jenkins、Harbor、生产服务器之间的网络互通,开放相关端口(如 85、8080)。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |