从开发到上线的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
部署服务器
相关推荐
NAGNIP3 分钟前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
sunny_1 小时前
⚡️ vite-plugin-oxc:从 Babel 到 Oxc,我为 Vite 写了一个高性能编译插件
前端·webpack·架构
点光4 小时前
使用Sentinel作为Spring Boot应用限流组件
后端
不要秃头啊5 小时前
别再谈提效了:AI 时代的开发范式本质变了
前端·后端·程序员
青青家的小灰灰5 小时前
深入理解事件循环:异步编程的基石
前端·javascript·面试
有志5 小时前
Java 项目添加慢 SQL 查询工具实践
后端
兆子龙5 小时前
模块联邦(Module Federation)详解:从概念到手把手 Demo
前端·架构
山佳的山6 小时前
KingbaseES 共享锁(SHARE)与排他锁(EXCLUSIVE)详解及测试复现
后端
Leo8996 小时前
rust 从零单排 之 一战到底
后端
程序员清风7 小时前
程序员兼职必看:靠谱软件外包平台挑选指南与避坑清单!
java·后端·面试