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

文章目录

  • [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 微服务持续集成流程

一、流程概述

  1. 代码提交:开发人员将代码推送至 GitLab 仓库。
  2. 镜像构建:Jenkins 拉取代码,编译打包为 WAR/JAR,并构建 Docker 镜像。
  3. 镜像推送:将镜像上传至 Harbor 私有仓库。
  4. 部署应用:Jenkins 通过 SSH 触发生产服务器从 Harbor 拉取镜像并启动容器。
  5. 用户访问:通过容器暴露的服务访问应用。

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

  1. 新建项目
    • 项目名称:tensquare
    • 访问级别:私有
  2. 创建用户
    • 用户名:zhangsan
    • 密码:Abc123456
  3. 添加成员
    • 将用户 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. 项目代码管理

  1. GitLab 创建项目
    • 项目名称:tensquare_back
    • 群组:devops_group
    • 可见性:私有
  2. 上传代码
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:代码分支(如 masterdev
    • publish_server:部署目标服务器(如 master_server,slave_server

注意

  1. 凭据管理

    • GitLab 和 Harbor 的账号密码需在 Jenkins 的 凭据管理 中提前配置。
    • 使用 withCredentials 安全传递敏感信息。
  2. Harbor HTTPS 配置

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

    • 构建后清理本地镜像,避免磁盘空间占用。
  4. 部署脚本权限

    • 确保生产服务器上的 deploy.sh 有执行权限:

      bash 复制代码
      chmod +x /opt/jenkins_shell/deploy.sh
  5. 网络与防火墙

    • 确保 Jenkins、Harbor、生产服务器之间的网络互通,开放相关端口(如 85、8080)。
相关推荐
LunarCod38 分钟前
Ubuntu使用Docker搭建SonarQube企业版(含破解方法)
linux·运维·服务器·ubuntu·docker·开源·sonarqube
什么半岛铁盒1 小时前
Linux信号的保存
linux·运维·网络
noravinsc1 小时前
国产化中间件 替换 nginx
运维·nginx·中间件
惜.己2 小时前
Linux常用命令(十四)
linux·运维·服务器
好吃的肘子2 小时前
Elasticsearch架构原理
开发语言·算法·elasticsearch·架构·jenkins
linkingvision3 小时前
H5S 视频监控AWS S3 对象存储
linux·运维·aws·视频监控s3对象存储
doupoa3 小时前
Fabric 服务端插件开发简述与聊天事件监听转发
运维·python·fabric
BillKu3 小时前
服务器多JAR程序运行与管理指南
运维·服务器·jar
QQ2740287563 小时前
BlockMesh Ai项目 监控节点部署教程
运维·服务器·web3
ZHOU_WUYI3 小时前
使用 Docker 部署 React + Nginx 应用教程
nginx·react.js·docker