从开发到上线的CI/CD 完整流程

🚀 整体大流程概览

开发 → Git 提交 → Jenkins 拉代码构建 → 打包/测试 → 打 Docker 镜像 → 推送镜像仓库 → 部署到服务器

下面我会把每一步展开说明,并告诉你是在 开发机 / Jenkins 服务器 / 目标部署服务器 上执行的。


1️⃣ 开发阶段(Developer 本地机器 / IDEA)

在哪里执行?

👉 本地电脑(开发机 / IDEA开发环境)

做什么?

  1. 在 IDEA 中编写 Spring Boot 或其他代码
  2. 本地启动、调试
  3. 提交前单元测试、代码检查

工具:

  • IntelliJ IDEA
  • JDK
  • Maven / Gradle
  • Git(本地客户端)

结果:

👉 代码准备好,准备推送到 Git 仓库


2️⃣ 提交代码到 Git(GitLab / GitHub / Gitee)

在哪里执行?

👉 开发者本地电脑

做什么?

sql 复制代码
git add .
git commit -m "修复xxx问题"
git push origin dev

推送到远程仓库(一般是 devtestreleasemaster 分支)

工具:

  • Git 客户端(命令行或 IDEA 内置)

结果:

👉 远程 Git 仓库收到代码


3️⃣ Jenkins 自动拉取代码(Jenkins 服务器)

在哪里执行?

👉 Jenkins 所在的服务器(通常是独立服务器)

Jenkins 服务器的任务:

✔ 监听 Git 仓库分支变化

有 webhook 或定时 polling:

  • dev / release / master 分支有变化 → 自动触发流水线

✔ 执行 Jenkins Pipeline(流水线)

流水线通常包括:

  1. 拉取 Git 仓库最新代码
  2. 执行 Maven 打包(mvn clean package -DskipTests
  3. 执行单元测试(如不跳过)
  4. 生成 Jar 包
  5. 构建 Docker 镜像
  6. 推送镜像到镜像仓库(Harbor / DockerHub)

这一步通常 Jenkins 上会安装:

  • JDK
  • Maven 或 Gradle
  • Docker
  • Jenkins 插件(Git、Pipeline、Docker 等)

4️⃣ Jenkins 打包项目(Jenkins 服务器)

在哪里执行?

👉 Jenkins 服务器

执行的命令一般是:

go 复制代码
mvn clean package -DskipTests

生成:

bash 复制代码
target/app.jar

结果:

👉 生成可用的 jar 包


5️⃣ Jenkins 构建 Docker 镜像(Jenkins 服务器)

在哪里执行?

👉 Jenkins 服务器(必须安装 Docker)

做什么?

  1. 使用 Dockerfile 构建镜像,例如:
bash 复制代码
FROM openjdk:8-jdk
COPY target/app.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
  1. Jenkins 执行命令:
erlang 复制代码
docker build -t myapp:v1 .
  1. 登录镜像仓库并推送:
perl 复制代码
docker login my-harbor.com
docker push my-harbor.com/mygroup/myapp:v1

6️⃣ 部署到服务器(部署服务器 / 生产环境)

在哪里执行?

👉 生产服务器(或者测试服务器、预发布服务器)

这一步通常不在 Jenkins 上,也不在本地。

部署服务器上执行:

  1. 从镜像仓库拉取镜像:
bash 复制代码
docker pull my-harbor.com/mygroup/myapp:v1
  1. 运行容器:
css 复制代码
docker run -d --name myapp -p 8080:8080 my-harbor.com/mygroup/myapp:v1

或者使用 Docker Compose:

yaml 复制代码
version: '3'
services:
  myapp:
    image: my-harbor.com/mygroup/myapp:v1
    ports:
      - "8080:8080"

也可能使用 Kubernetes(k8s)部署,比如:

bash 复制代码
kubectl set image deployment/myapp myapp=my-harbor.com/mygroup/myapp:v1

📌 完整流程的执行环境总结表

步骤 操作内容 执行环境 工具
1. 开发 写代码、调试 本地电脑 IDEA、Maven、Git
2. 提交代码 push 到 Git 本地电脑 Git
3. Jenkins 拉代码 webhook 自动触发 Jenkins 服务器 Jenkins Git 插件
4. 编译打包 mvn clean package Jenkins 服务器 Maven、JDK
5. 生成镜像 docker build Jenkins 服务器 Docker
6. 推送镜像 docker push Jenkins 服务器 Docker、Harbor
7. 部署上线 docker run / k8s apply 部署服务器(测试/生产) Docker 或 Kubernetes

💡 可能存在的服务器划分方式

不同公司组织有不同方式,你可以参考:


方案 A:三台服务器分工明确(推荐)

服务器 作用
Jenkins 服务器 构建、打包、打镜像、推镜像
测试服务器 部署测试环境
生产服务器 部署正式环境

方案 B:两台服务器(小公司常见)

服务器 作用
Jenkins + 测试环境服务器 Jenkins 和测试容器同一台机器
生产服务器 只部署生产容器

方案 C:一台服务器全干(不推荐)

测试、构建、部署都在一个服务器上

安全风险高,不适合正式环境。


📦 最后给你一个可视化流程图(文字版)

yaml 复制代码
开发者本地
   |
   | push 代码
   v
GitLab / GitHub
   |
   | Webhook
   v
Jenkins 服务器
   |
   | 拉代码 -> Maven 打包 -> Docker build -> Docker push
   v
镜像仓库(Harbor)
   |
   | docker pull
   v
部署服务器(测试 / 生产)
   |
   v
docker run / k8s apply
   |
   v
系统上线

🧩 若使用Liquibase做数据库版本控制

下面是执行 Liquibase 的详细执行流程图:

lua 复制代码
开发者本地
   |
   | push 代码 (Liquibase 脚本)
   v
GitLab/GitHub
   |
   | Jenkins Pull
   v
Jenkins
   |
   +-- Stage 1: Checkout
   |
   +-- Stage 2: Liquibase Update (更新数据库)
   |       - 执行 XML 变更文件
   |       - 写入 DATABASECHANGELOG
   |       - 如果失败则流水线失败
   |
   +-- Stage 3: Maven Package
   |
   +-- Stage 4: Docker Build
   |
   +-- Stage 5: Docker Push
   v
镜像仓库(Harbor)
   |
   | docker pull
   v
部署服务器
相关推荐
测试涛叔3 小时前
金三银四软件测试面试题(800道)
软件测试·面试·职场和发展
JMchen1234 小时前
现代Android图像处理管道:从CameraX到OpenGL的60fps实时滤镜架构
android·图像处理·架构·kotlin·android studio·opengl·camerax
一点程序5 小时前
基于SpringBoot的选课调查系统
java·spring boot·后端·选课调查系统
C雨后彩虹5 小时前
计算疫情扩散时间
java·数据结构·算法·华为·面试
蒹葭玉树6 小时前
【C++上岸】C++常见面试题目--操作系统篇(第二十八期)
linux·c++·面试
怪兽源码6 小时前
基于SpringBoot的选课调查系统
java·spring boot·后端·选课调查系统
csdn_aspnet7 小时前
ASP.NET Core 中的依赖注入
后端·asp.net·di·.net core
Jing_jing_X7 小时前
CPU 架构:x86、x64、ARM 到底是什么?为什么程序不能通用?
arm开发·架构·cpu
昊坤说不出的梦8 小时前
【实战】监控上下文切换及其优化方案
java·后端
疯狂踩坑人8 小时前
【Python版 2026 从零学Langchain 1.x】(二)结构化输出和工具调用
后端·python·langchain