【CI/CD】Jenkins + Docker +SpringCloud微服务项目一连集成

打印 上一主题 下一主题

主题 823|帖子 823|积分 2469

Jenkins + Docker + SpringCloud 微服务一连集成流程

一、流程概述


  • 代码提交:开发人员将代码推送至 GitLab 堆栈。
  • 镜像构建:Jenkins 拉取代码,编译打包为 WAR/JAR,并构建 Docker 镜像。
  • 镜像推送:将镜像上传至 Harbor 私有堆栈。
  • 部署应用:Jenkins 通过 SSH 触发生产服务器从 Harbor 拉取镜像并启动容器。
  • 用户访问:通过容器暴露的服务访问应用。
二、Harbor 安装与配置

1. 环境预备

服务器:192.168.80.14
依靠组件:Docker、Docker Compose
2. 安装 Docker

  1. # 安装 Docker
  2. yum install -y docker
  3. systemctl start docker
  4. systemctl enable docker
复制代码
3. 安装 Docker Compose

  1. # 下载并安装 Docker Compose
  2. curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  3. chmod +x /usr/local/bin/docker-compose
  4. docker-compose -v  # 验证安装
复制代码
4. 安装 Harbor

  1. # 下载并解压 Harbor
  2. wget https://github.com/goharbor/harbor/releases/download/v1.9.2/harbor-offline-installer-v1.9.2.tgz
  3. tar -zxvf harbor-offline-installer-v1.9.2.tgz -C /opt
  4. cd /opt/harbor
  5. # 修改配置文件
  6. vim harbor.yml
  7. ---
  8. hostname: 192.168.80.14  # 修改为当前服务器 IP
  9. port: 85                  # 修改监听端口
  10. ---
  11. # 启动 Harbor
  12. ./install.sh
  13. docker-compose ps         # 查看服务状态
复制代码
5. 访问 Harbor



  • 地址:http://192.168.80.14:85
  • 默认账户:admin / Harbor12345
6. 创建项目与用户


  • 新建项目

    • 项目名称:tensquare
    • 访问级别:私有

  • 创建用户

    • 用户名:zhangsan
    • 密码:Abc123456

  • 添加成员

    • 将用户 zhangsan 添加到项目 tensquare,脚色为 维护人员

三、Docker 节点配置

1. 信托 Harbor 堆栈

在全部 Docker 节点修改配置文件:
  1. cat > /etc/docker/daemon.json <<EOF
  2. {
  3.   "registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"],
  4.   "insecure-registries": ["192.168.80.14:85"]
  5. }
  6. EOF
  7. systemctl daemon-reload
  8. systemctl restart docker
复制代码
四、微服务一连集成实现

1. 项目代码管理


  • GitLab 创建项目

    • 项目名称:tensquare_back
    • 群组:devops_group
    • 可见性:私有

  • 上传代码
  1. git clone http://192.168.80.20:82/devops_group/tensquare_back.git
  2. cd tensquare_back
  3. git add .
  4. git commit -m "Initial commit"
  5. git push -u origin master
复制代码
2. Jenkins Pipeline 脚本

  1. pipeline {
  2.   agent any
  3.   environment {
  4.     git_url = "http://192.168.80.20:82/devops_group/tensquare_back.git"
  5.     git_auth = "gitlab-auth-id"                # Jenkins 中配置的 GitLab 凭据 ID
  6.     harbor_url = "192.168.80.14:85"
  7.     harbor_project_name = "tensquare"
  8.     harbor_auth = "harbor-auth-id"             # Jenkins 中配置的 Harbor 凭据 ID
  9.     project_name = "tensquare-service"         # 微服务项目名称
  10.     port = "8080"                              # 服务端口
  11.   }
  12.   stages {
  13.     // 1. 拉取代码
  14.     stage('拉取代码') {
  15.       steps {
  16.         checkout([
  17.           $class: 'GitSCM',
  18.           branches: [[name: "*/${branch}"]],
  19.           extensions: [],
  20.           userRemoteConfigs: [[
  21.             credentialsId: "${git_auth}",
  22.             url: "${git_url}"
  23.           ]]
  24.         ])
  25.       }
  26.     }
  27.     // 2. 编译公共子工程
  28.     stage('编译公共子工程') {
  29.       steps {
  30.         sh "mvn -f common-module clean install"
  31.       }
  32.     }
  33.     // 3. 构建镜像并推送至 Harbor
  34.     stage('构建与推送镜像') {
  35.       steps {
  36.         script {
  37.           sh "mvn -f ${project_name} clean package dockerfile:build"
  38.           def imageName = "${project_name}:latest"
  39.           sh "docker tag ${imageName} ${harbor_url}/${harbor_project_name}/${imageName}"
  40.           withCredentials([usernamePassword(
  41.             credentialsId: "${harbor_auth}",
  42.             usernameVariable: 'USERNAME',
  43.             passwordVariable: 'PASSWORD'
  44.           )]) {
  45.             sh "docker login -u ${USERNAME} -p ${PASSWORD} ${harbor_url}"
  46.             sh "docker push ${harbor_url}/${harbor_project_name}/${imageName}"
  47.           }
  48.           sh "docker rmi -f ${imageName}"
  49.           sh "docker rmi -f ${harbor_url}/${harbor_project_name}/${imageName}"
  50.         }
  51.       }
  52.     }
  53.     // 4. 部署到生产服务器
  54.     stage('部署应用') {
  55.       steps {
  56.         sshPublisher(
  57.           publishers: [
  58.             sshPublisherDesc(
  59.               configName: 'production-server',  # Jenkins 中配置的 SSH 服务器名称
  60.               transfers: [
  61.                 sshTransfer(
  62.                   execCommand: "bash /opt/jenkins_shell/deploy.sh ${harbor_url} ${harbor_project_name} ${project_name} ${port}",
  63.                   sourceFiles: 'deploy.sh'       # 部署脚本上传到服务器
  64.                 )
  65.               ]
  66.             )
  67.           ]
  68.         )
  69.       }
  70.     }
  71.   }
  72. }
复制代码
3. 部署脚本 (deploy.sh)

  1. #!/bin/bash
  2. harbor_url=$1
  3. harbor_project=$2
  4. project_name=$3
  5. port=$4
  6. # 拉取镜像
  7. docker pull ${harbor_url}/${harbor_project}/${project_name}:latest
  8. # 停止并删除旧容器
  9. docker stop ${project_name} || true
  10. docker rm ${project_name} || true
  11. # 启动新容器
  12. docker run -d --name ${project_name} -p ${port}:${port} \
  13.   ${harbor_url}/${harbor_project}/${project_name}:latest
复制代码
五、多服务器部署扩展

1. 动态选择部署目标

修改 stage('部署应用') 以支持多服务器:
  1. stage('部署应用') {
  2.   steps {
  3.     script {
  4.       def selectedServers = "${publish_server}".split(",")
  5.       for (server in selectedServers) {
  6.         sshPublisher(
  7.           publishers: [
  8.             sshPublisherDesc(
  9.               configName: "${server}",
  10.               transfers: [
  11.                 sshTransfer(
  12.                   execCommand: "bash /opt/jenkins_shell/deploy.sh ${harbor_url} ${harbor_project_name} ${project_name} ${port}",
  13.                   sourceFiles: 'deploy.sh'
  14.                 )
  15.               ]
  16.             )
  17.           ]
  18.         )
  19.       }
  20.     }
  21.   }
  22. }
复制代码
2. 配置文件参数



  • Jenkins 参数

    • branch:代码分支(如 master、dev)
    • publish_server:部署目标服务器(如 master_server,slave_server)

留意


  • 凭据管理

    • GitLab 和 Harbor 的账号密码需在 Jenkins 的 凭据管理 中提前配置。
    • 利用 withCredentials 安全通报敏感信息。

  • Harbor HTTPS 配置

    • 生产环境建议启用 HTTPS,修改 harbor.yml 并配置证书。

  • 镜像清理

    • 构建后清理当地镜像,制止磁盘空间占用。

  • 部署脚本权限

    • 确保生产服务器上的 deploy.sh 有执行权限:
      1. chmod +x /opt/jenkins_shell/deploy.sh
      复制代码

  • 网络与防火墙

    • 确保 Jenkins、Harbor、生产服务器之间的网络互通,开放相关端口(如 85、8080)。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

魏晓东

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表