🚀 整体大流程概览
开发 → Git 提交 → Jenkins 拉代码构建 → 打包/测试 → 打 Docker 镜像 → 推送镜像仓库 → 部署到服务器
下面我会把每一步展开说明,并告诉你是在 开发机 / Jenkins 服务器 / 目标部署服务器 上执行的。
1️⃣ 开发阶段(Developer 本地机器 / IDEA)
在哪里执行?
👉 本地电脑(开发机 / IDEA开发环境)
做什么?
- 在 IDEA 中编写 Spring Boot 或其他代码
- 本地启动、调试
- 提交前单元测试、代码检查
工具:
- IntelliJ IDEA
- JDK
- Maven / Gradle
- Git(本地客户端)
结果:
👉 代码准备好,准备推送到 Git 仓库
2️⃣ 提交代码到 Git(GitLab / GitHub / Gitee)
在哪里执行?
👉 开发者本地电脑
做什么?
sql
git add .
git commit -m "修复xxx问题"
git push origin dev
推送到远程仓库(一般是 dev、test、release 或 master 分支)
工具:
- Git 客户端(命令行或 IDEA 内置)
结果:
👉 远程 Git 仓库收到代码
3️⃣ Jenkins 自动拉取代码(Jenkins 服务器)
在哪里执行?
👉 Jenkins 所在的服务器(通常是独立服务器)
Jenkins 服务器的任务:
✔ 监听 Git 仓库分支变化
有 webhook 或定时 polling:
- 当
dev/release/master分支有变化 → 自动触发流水线
✔ 执行 Jenkins Pipeline(流水线)
流水线通常包括:
- 拉取 Git 仓库最新代码
- 执行 Maven 打包(
mvn clean package -DskipTests) - 执行单元测试(如不跳过)
- 生成 Jar 包
- 构建 Docker 镜像
- 推送镜像到镜像仓库(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)
做什么?
- 使用 Dockerfile 构建镜像,例如:
bash
FROM openjdk:8-jdk
COPY target/app.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
- Jenkins 执行命令:
erlang
docker build -t myapp:v1 .
- 登录镜像仓库并推送:
perl
docker login my-harbor.com
docker push my-harbor.com/mygroup/myapp:v1
6️⃣ 部署到服务器(部署服务器 / 生产环境)
在哪里执行?
👉 生产服务器(或者测试服务器、预发布服务器)
这一步通常不在 Jenkins 上,也不在本地。
部署服务器上执行:
- 从镜像仓库拉取镜像:
bash
docker pull my-harbor.com/mygroup/myapp:v1
- 运行容器:
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
部署服务器