从开发到上线的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
部署服务器
相关推荐
yoyo_zzm8 分钟前
Laravel10.x新特性全解析
数据库·mysql·架构
Rust语言中文社区11 分钟前
【Rust日报】2026-05-02 Temper - 用 Rust 编写的 Minecraft 服务器项目发布 0.1.0 版
运维·服务器·开发语言·后端·rust
冯诺依曼的锦鲤16 分钟前
从零实现高并发内存池:TCMalloc 核心架构拆解
c++·学习·算法·架构
陈随易20 分钟前
2年没用Nodejs了,Bun很香
前端·后端·程序员
nvd1122 分钟前
深度解析:Kong Hybrid 模式与 KIC (Gateway API) 架构演进与核心异同
架构·gateway·kong
knight_9___1 小时前
LLM工具调用面试篇5
人工智能·python·深度学习·面试·职场和发展·llm·agent
独隅1 小时前
倒排索引与实时检索架构揭秘
架构
用户9416146933651 小时前
Python 实时监控 A 股行情并自动筛选强势股(REST + WebSocket 两种方案)
后端·数据分析
Java编程爱好者1 小时前
吃透 ForkJoinPool:工作窃取底层原理,一次性讲透
后端
longxibo1 小时前
【Flowable 7.2 源码深度解析与实战】
java·后端·流程图