魏晓东 发表于 昨天 20:21

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

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. 创建项目与用户


[*]新建项目:

[*]项目名称:tensquare
[*]访问级别:私有

[*]创建用户:

[*]用户名: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: [],
          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企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【CI/CD】Jenkins + Docker +SpringCloud微服务项目一连集成