Skip to content

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 视角:渐进式发布 = 反馈逐步放大——小流量先暴露问题。

常见误区 ​

  1. "CI = 跑测试"——错。CI = 构建可发布制品——跑测试只是 CI 的一部分
  2. "CI/CD = DevOps"——错。CI/CD 是 DevOps 的技术手段,不是全部
  3. "长分支更安全"——错。长分支 = merge 地狱。trunk-based + feature flag 才是现代做法
  4. "自动部署 = 自动到生产"——错。自动到 staging 是必须的,自动到 prod 取决于团队成熟度
  5. "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 = 契约不破坏。

相关链接 ​

从名家方法论与工程化思路中蒸馏出自己的工程体系。