CI/CD
解决什么问题:手工部署 = 每月一次大爆炸。CI/CD 把部署变成日常高频低风险动作——持续集成 + 持续交付。
它是什么
CI(Continuous Integration,持续集成) = 每次代码合并自动跑测试 + 构建;CD(Continuous Delivery/Deployment,持续交付/部署) = 每次合并自动产出可发布产物(甚至自动发布)。
提交 → CI 触发 → 测试 + 构建 → CD 触发 → 制品入库 → 部署到环境
(开发者) (GitHub Actions) (ArgoCD / Spinnaker)SE@G Ch 18:"The CI/CD pipeline is the foundation of modern software delivery."
V2 视角(V2.7 B5 反馈):CI/CD 是工程的"反馈循环"——快反馈 = 早发现问题。控制论闭环延迟越短,系统越稳。
关键属性
| 属性 | 值/含义 |
|---|---|
| CI 触发 | 每次 push / PR / merge |
| CI 内容 | 单元测试 + 集成测试 + lint + 静态分析 + 构建 |
| CD 内容 | 制品入库(image / jar)→ 部署到 staging → 手动/自动 prod |
| 关键指标 | lead time(提交到生产时长)< 1 天 |
| 反模式 | 长分支(feature branch 数周才合) |
| 核心约束 | main 分支永远可发布 |
| 判错标准 | 部署是"大事件" = CI/CD 失效 |
怎么用
场景 1:GitHub Actions CI 流水线
yaml
name: CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with: { java-version: '21' }
- run: ./gradlew check # 单元 + 集成
- run: ./gradlew detekt # 静态分析
- run: ./gradlew build # 编译
- run: docker build -t app:${{ github.sha }} .场景 2:CD(GitOps / ArgoCD)
yaml
# 1. CI 阶段产出镜像并更新 manifest repo
- run: |
docker push registry/app:${{ github.sha }}
sed -i "s|image: app:.*|image: app:${{ github.sha }}|" k8s/deployment.yaml
git push origin main # 推到 manifest 仓库
# 2. ArgoCD 监听 manifest 仓库,自动同步到 k8s关键:GitOps = 单一真相源——生产状态完全由 git 决定,可回滚、可审计。
场景 3:渐进式发布(金丝雀/蓝绿)
不要一次性全量:
- 金丝雀:1% 流量 → 监控 → 10% → 50% → 100%
- 蓝绿:切流量开关,秒级回滚
V2 B5 视角:渐进式发布 = 反馈逐步放大——小流量先暴露问题。
常见误区
- "CI = 跑测试"——错。CI = 构建可发布制品——跑测试只是 CI 的一部分
- "CI/CD = DevOps"——错。CI/CD 是 DevOps 的技术手段,不是全部
- "长分支更安全"——错。长分支 = merge 地狱。trunk-based + feature flag 才是现代做法
- "自动部署 = 自动到生产"——错。自动到 staging 是必须的,自动到 prod 取决于团队成熟度
- "CI 慢 = 没事"——错。CI > 10 分钟 = 工程师开始不跑 = CI 形同虚设
关键洞察
CI/CD 是工程系统的"反馈通道"——快反馈 = 早发现 = 低成本修复。
控制论视角:CI/CD = 闭环控制的高频版本。慢反馈 = 大超调 = 系统震荡。 IDDD Ch 13 视角:BC 集成的发布必须独立可部署——CI/CD 是 BC 自治的工程保障。 SE@G Ch 18 视角:Google 的 TAP(Tricorder AutoPilot)系统——CI 不只是测试,还有"自动化最佳实践检查"。 EDM Ch 8 视角:事件系统的 schema 演进必须经 CI 验证——Schema Registry + Schema CI = 契约不破坏。
相关链接
- Build System Philosophy——CI 的构建基础
- DB Migration——CI/CD 中的迁移
- [V3 涌现作为] · 反馈——CI/CD = 高频反馈
- [V3 涌现作为] · 权衡——CI/CD 速度 vs 覆盖率的权衡
- 源典:SE@G Ch 18——大规模 CI/CD
- 源典:EDM Ch 8——事件系统的 CD