CI/CD 流水线基础回顾:持续集成、持续交付、持续部署

在深入质量门禁与 SLI 口径配置之前,必须统一对 CI/CD 流水线核心概念与阶段划分的认知。本章从概念辨析与阶段拆解两个维度,为后续门禁参数设计奠定基础。

一、持续集成、持续交付、持续部署的概念辨析

三个术语常被混用,但在流水线设计与门禁策略上存在本质差异。下表从目标、触发方式、质量要求三个维度进行对比:

维度 持续集成 (CI) 持续交付 (CD) 持续部署 (CD)
核心目标 频繁合并代码变更,自动验证构建与单元测试 确保每次变更可随时发布到生产环境 自动将通过验证的变更直接部署到生产
触发方式 代码推送 / PR 合并 CI 通过 + 人工审批(可选) CI + 验收测试通过后自动触发
质量门禁要求 编译通过率、单元测试覆盖率、静态扫描阈值 集成测试通过率、性能基线、安全扫描 全链路验收测试、灰度监控、回滚能力验证
部署频率 不涉及部署 按需发布(通常每日/每周) 每次变更自动部署(每日多次)
典型门禁失效后果 构建失败阻塞团队 发布延期或回滚 生产故障直接暴露
实践要点: 在质量门禁驱动的流水线中,CI 阶段的门禁应偏向"快速失败"(Fast Fail),CD 阶段的门禁应偏向"安全放行"(Safe Release)。持续部署对 SLI 口径的实时性要求最高,通常需要秒级指标反馈。

二、流水线阶段划分与核心活动

标准 CI/CD 流水线通常划分为四个核心阶段:代码提交 → 构建 → 测试 → 部署。每个阶段都有特定的质量门禁检查点。

阶段全景图: 下图展示了四个阶段之间的数据流与门禁触发关系。注意每个阶段输出的制品(Artifact)是下一阶段门禁的输入。
CI/CD 流水线四阶段与质量门禁关系图 CI/CD 流水线四阶段与质量门禁关系 代码提交 Commit / PR Merge 构建 Compile / Package 测试 Unit / Integration / E2E 部署 Staging / Production 门禁:代码规范检查 Commit Message 合规 门禁:编译成功率 制品完整性校验 门禁:测试通过率 覆盖率阈值 / 性能基线 门禁:部署策略验证 灰度比例 / 回滚就绪 每个阶段的门禁检查点(黄色框)是 SLI 口径采集与阈值配置的核心位置 门禁通过后,制品(Artifact)才能流入下一阶段

三、各阶段详细活动与门禁关注点

以下按阶段拆解具体活动,并标注与质量门禁 SLI 口径直接相关的参数:

1. 代码提交阶段

  • 活动: 开发者推送代码到远程仓库,或发起 Pull Request。
  • 门禁关注点:
    • 代码风格检查(Lint)通过率
    • Commit Message 格式合规性
    • 分支命名规范校验
    • 敏感信息(密钥/)扫描
  • SLI 口径示例: commit_lint_pass_rate = 通过检查的提交数 / 总提交数

2. 构建阶段

  • 活动: 编译源代码、打包制品(JAR/WAR/Docker Image)、生成依赖锁文件。
  • 门禁关注点:
    • 编译成功率(Build Success Rate)
    • 构建时长是否超出基线(Build Duration P95)
    • 制品签名与完整性校验
    • 依赖漏洞扫描(CVE Check)
  • SLI 口径示例: build_success_rate = 成功构建次数 / 总构建触发次数

3. 测试阶段

  • 活动: 执行单元测试、集成测试、端到端测试、性能测试、安全扫描。
  • 门禁关注点:
    • 测试用例通过率(Test Pass Rate)
    • 代码覆盖率阈值(Line Coverage / Branch Coverage)
    • 性能基线偏差(响应时间 P99 / TPS)
    • 安全漏洞严重级别数量
  • SLI 口径示例: test_pass_rate = 通过的测试用例数 / 总测试用例数

4. 部署阶段

  • 活动: 将制品部署到测试环境、预发布环境、生产环境(灰度/全量)。
  • 门禁关注点:
    • 部署成功率(Deploy Success Rate)
    • 回滚触发频率(Rollback Rate)
    • 灰度期间错误率(Error Budget 消耗)
    • 环境配置一致性校验
  • SLI 口径示例: deploy_success_rate = 成功部署次数 / 总部署尝试次数
常见误区: 很多团队将"测试阶段"的门禁仅设置为"测试通过率",忽略了覆盖率阈值和性能基线。在质量门禁驱动的流水线中,测试阶段至少应配置 3 个独立 SLI 口径:通过率、覆盖率、性能偏差率,否则门禁容易被绕过。

四、阶段间制品流转与门禁触发逻辑

流水线的核心价值在于制品(Artifact)的不可变流转。每个阶段输出的制品必须附带质量元数据(Metadata),供下一阶段门禁决策。以下表格总结了制品类型与元数据内容:

阶段 输出制品 质量元数据(门禁输入)
代码提交 Commit / PR Lint 结果、Commit 合规标记
构建 二进制包 / Docker Image 构建日志、依赖扫描报告、制品哈希
测试 测试报告 / 覆盖率报告 通过率、覆盖率、性能基线偏差、安全漏洞列表
部署 运行环境版本 / 配置清单 部署状态、健康检查结果、灰度指标
制品流转与门禁决策流程 制品流转与门禁决策流程 制品输入 门禁决策引擎 通过 → 下一阶段 阻断 → 反馈开发者 质量元数据 门禁通过:制品携带元数据 进入下一阶段流水线 门禁阻断:制品被拒绝, 触发告警并通知开发者

五、阶段划分对 SLI 口径设计的启示

理解流水线阶段划分后,可以得出以下 SLI 口径设计原则:

  1. 阶段内口径: 每个阶段至少定义 1 个通过率 SLI(如构建成功率、测试通过率),用于衡量阶段健康度。
  2. 阶段间口径: 定义制品流转延迟 SLI(如从代码提交到构建完成的时间 P95),用于衡量流水线效率。
  3. 门禁触发口径: 门禁本身的可用性 SLI(如门禁决策响应时间 < 500ms),确保门禁不会成为流水线瓶颈。
  4. 回滚口径: 部署阶段必须包含回滚率 SLI,用于评估发布质量与门禁有效性。