从开发到上线的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
部署服务器
相关推荐
Tony Bai4 分钟前
再见,丑陋的 container/heap!Go 泛型堆 heap/v2 提案解析
开发语言·后端·golang
发现一只大呆瓜12 分钟前
虚拟列表:支持“向上加载”的历史消息(Vue 3 & React 双版本)
前端·javascript·面试
寻找奶酪的mouse36 分钟前
30岁技术人对职业和生活的思考
前端·后端·年终总结
梦想很大很大43 分钟前
使用 Go + Gin + Fx 构建工程化后端服务模板(gin-app 实践)
前端·后端·go
毅炼1 小时前
Java 基础常见问题总结(4)
java·后端
想用offer打牌1 小时前
MCP (Model Context Protocol) 技术理解 - 第一篇
后端·aigc·mcp
千寻girling1 小时前
Koa.js 教程 | 一份不可多得的 Node.js 的 Web 框架 Koa.js 教程
前端·后端·面试
程序员清风1 小时前
北京回长沙了,简单谈谈感受!
java·后端·面试
何中应2 小时前
请求头设置没有生效
java·后端
一个骇客2 小时前
让你的数据成为“操作日志”和“模型饲料”:事件溯源、CQRS与DataFrame漫谈
架构