跳至主要內容
GitHub Actions 实战:Java 项目的 CI/CD 流水线搭建

GitHub Actions 实战:Java 项目的 CI/CD 流水线搭建

从零搭建一条完整的 Java 项目 CI/CD 流水线,包含编译、测试、代码扫描、Docker 镜像构建和多环境自动部署。

1. CI/CD 核心概念与价值

1.1 什么是 CI/CD

传统开发流程(无 CI/CD):

开发 → 本地测试 → 提交代码 → [等待] → 集成 → [发现冲突] → 排查 → 修复 →
手动构建 → 手动测试 → 手动部署 → [部署失败!] → 排查 → 重新部署
时间:数小时到数天


现代 CI/CD 流程:

开发 → 本地测试 → 提交代码 →
  ┌───────────────────────────────────────────────┐
  │              CI(持续集成)                      │
  │  自动检出 → 编译 → 单元测试 → 代码扫描 → 构建镜像  │
  │  时间:5-10 分钟                                │
  └───────────────┬───────────────────────────────┘
                  │ 全部通过
                  ▼
  ┌───────────────────────────────────────────────┐
  │              CD(持续交付/部署)                  │
  │  自动部署到 dev → 集成测试 → 部署到 staging →     │
  │  部署到 production(手动审批或自动)               │
  └───────────────────────────────────────────────┘

郑天祺大约 10 分钟CICDCICD
Jenkins 完全指南:从"又老又丑"到"CI/CD 常青树"

Jenkins 完全指南:从"又老又丑"到"CI/CD 常青树"

如果你问一个 10 年经验的后端:"十年前你们怎么部署代码?" 他八成会叹口气,然后说出那个让他又爱又恨的名字——Jenkins


一、用故事开头:Jenkins 到底是干嘛的?

想象一个场景:

凌晨 2 点,你刚写完最后一个功能。测试说 OK,前端说联调通过。现在你要——

  1. 拉最新代码
  2. 跑一遍测试
  3. 打个 war/jar 包
  4. 上传到服务器
  5. 停掉旧服务
  6. 启动新服务
  7. 确认部署成功
  8. 给群里发个通知

郑天祺大约 10 分钟CICDCICD
部署策略对比:蓝绿 vs 金丝雀 vs 滚动,怎么选

部署策略对比:蓝绿 vs 金丝雀 vs 滚动,怎么选

部署策略选错,轻则用户体验受损,重则生产事故。本文从原理到实践,帮你做出正确选择。

1. 四种主流部署策略图解

1.1 策略全景图

┌─────────────────────────────────────────────────────────────────┐
│                      四种部署策略对比                              │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  滚动更新(Rolling Update)                                      │
│  ┌───┐     ┌───┐     ┌───┐     ┌───┐                           │
│  │ v1 │ →  │ v2 │ →  │ v2 │ →  │ v2 │  逐个替换                   │
│  └───┘     └───┘     └───┘     └───┘                           │
│  ┌───┐     ┌───┐     ┌───┐     ┌───┐                           │
│  │ v1 │     │ v1 │ →  │ v2 │ →  │ v2 │                           │
│  └───┘     └───┘     └───┘     └───┘                           │
│  ┌───┐     ┌───┐     ┌───┐     ┌───┐                           │
│  │ v1 │     │ v1 │     │ v1 │ →  │ v2 │                           │
│  └───┘     └───┘     └───┘     └───┘                           │
│                                                                 │
│  蓝绿部署(Blue-Green)                                          │
│   ┌─────────────────┐         ┌─────────────────┐               │
│   │    Blue (v1)    │  切换 → │   Green (v2)    │               │
│   │   所有流量在这里    │ ──────→│   所有流量切过来   │               │
│   └─────────────────┘         └─────────────────┘               │
│                                                                 │
│  金丝雀发布(Canary)                                            │
│   流量: 90% v1  ──┐                                             │
│                  ├──→ 观察指标 → 10% OK → 50% → 100%             │
│   流量: 10% v2  ──┘                                             │
│                                                                 │
│  A/B 测试                                                        │
│   用户群A → v1 (对照组)                                          │
│   用户群B → v2 (实验组)  → 对比转化率/留存率                       │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

郑天祺大约 13 分钟CICDCICD