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

15 阅读4分钟

🚀 整体大流程概览

开发 → 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)

在哪里执行?
👉 开发者本地电脑

做什么?

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 服务器

执行的命令一般是:

mvn clean package -DskipTests

生成:

target/app.jar

结果:
👉 生成可用的 jar 包


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

在哪里执行?
👉 Jenkins 服务器(必须安装 Docker)

做什么?

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

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

在哪里执行?
👉 生产服务器(或者测试服务器、预发布服务器)

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

部署服务器上执行:

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

或者使用 Docker Compose:

version: '3'
services:
  myapp:
    image: my-harbor.com/mygroup/myapp:v1
    ports:
      - "8080:8080"

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

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 packageJenkins 服务器Maven、JDK
5. 生成镜像docker buildJenkins 服务器Docker
6. 推送镜像docker pushJenkins 服务器Docker、Harbor
7. 部署上线docker run / k8s apply部署服务器(测试/生产)Docker 或 Kubernetes

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

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


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

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

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

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

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

测试、构建、部署都在一个服务器上
安全风险高,不适合正式环境。


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

开发者本地
   |
   | 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 的详细执行流程图:

开发者本地
   |
   | 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
部署服务器