2. CI/CD 流水线核心阶段:SLI 切入点

CI/CD 流水线通常由代码提交、构建、测试、部署、发布、监控六个核心阶段串联而成。每个阶段都有其独特的质量与效率关注点,SLI(Service Level Indicator)的植入必须与阶段特征对齐,才能准确反映流水线健康度。以下逐一拆解各阶段的 SLI 切入点。

2.1 阶段总览与 SLI 映射

下表列出六个阶段的核心产出、典型故障模式以及对应的 SLI 类别,便于后续逐节展开时建立全局视角。

阶段 核心产出 典型故障模式 SLI 切入点
代码提交 代码变更入库 提交阻塞、合并冲突、门禁超时 提交延迟、门禁通过率
构建 制品/镜像 编译失败、依赖下载慢、构建超时 构建成功率、构建时长
测试 测试报告 用例失败、覆盖率不足、环境不稳定 测试通过率、测试覆盖率
部署 运行实例 部署失败、回滚、配置错误 部署成功率、部署时长
发布 流量切换 灰度异常、发布中断、版本回退 发布成功率、发布耗时
监控 可观测数据 指标缺失、告警延迟、数据断点 数据完整性、告警延迟

2.2 代码提交阶段

代码提交是流水线的起点,SLI 应聚焦于提交效率与门禁质量。

  • 提交延迟(Commit Latency):从开发者执行 git push 到流水线触发预检查(如 lint、静态扫描)完成的时间。高延迟会打断开发心流。
  • 门禁通过率(Gate Pass Rate):通过代码门禁检查的提交占比。低于 90% 说明门禁规则过严或代码质量下滑。
  • 合并冲突率(Merge Conflict Rate):因冲突导致合并失败的 PR 占比,反映分支管理健康度。
实践建议:提交阶段 SLI 的采集点应放在 Git 仓库的 webhook 接收端与门禁服务之间,避免将网络传输抖动计入指标。

2.3 构建阶段

构建阶段将源代码转换为可部署的制品,SLI 应覆盖稳定性与时效性。

  • 构建成功率(Build Success Rate):成功构建次数 / 总构建次数。低于 95% 需排查依赖缓存、编译环境或基础镜像问题。
  • 构建时长(Build Duration):从构建任务开始到制品产出的耗时。P95 构建时长超过 10 分钟时应考虑并行构建或缓存优化。
  • 制品大小变化率(Artifact Size Delta):构建产物大小与基线版本的偏差,用于发现无意识依赖引入。
# 构建成功率计算示例(PromQL 风格)
build_success_rate = (
    sum(rate(build_result{status="success"}[5m]))
    /
    sum(rate(build_result{status=~"success|failure"}[5m]))
) * 100

2.4 测试阶段

测试阶段是质量保障的核心环节,SLI 需区分功能正确性与测试充分性。

  • 测试通过率(Test Pass Rate):通过用例数 / 总执行用例数。单元测试通过率应 ≥ 98%,集成测试 ≥ 95%。
  • 测试覆盖率(Test Coverage):代码行/分支/函数的覆盖比例。行覆盖率低于 60% 时应触发告警。
  • 测试执行时长(Test Execution Duration):全量测试套件的执行时间。超过 30 分钟应考虑分层测试策略。
注意:测试 SLI 必须区分测试层级(单元/集成/E2E),混在一起计算会掩盖真实质量瓶颈。建议按测试类型分别定义 SLI 阈值。

2.5 部署阶段

部署阶段将制品安装到目标环境,SLI 应关注成功率与速度。

  • 部署成功率(Deploy Success Rate):部署成功次数 / 总部署次数。生产环境部署成功率应 ≥ 99.5%。
  • 部署时长(Deploy Duration):从部署任务启动到实例就绪的时间。P95 部署时长超过 15 分钟需优化部署流程。
  • 回滚率(Rollback Rate):触发回滚的部署次数占比。高于 5% 说明发布质量或灰度策略存在问题。

2.6 发布阶段

发布阶段涉及流量切换与版本生效,SLI 需体现可控性与稳定性。

  • 发布成功率(Release Success Rate):完成全量流量切换且无异常回滚的发布占比。
  • 灰度验证通过率(Canary Pass Rate):灰度期间关键业务指标(如错误率、延迟)未恶化的比例。
  • 发布耗时(Release Duration):从开始灰度到全量生效的总时间。超过 60 分钟应考虑自动化灰度策略。

2.7 监控阶段

监控阶段是流水线的闭环,SLI 应衡量数据质量与告警时效。

  • 数据完整性(Data Completeness):实际采集的指标点数 / 预期采集点数。低于 99% 说明采集链路存在断点。
  • 告警延迟(Alert Latency):从故障发生到告警触发的延迟。P99 告警延迟应 ≤ 5 分钟。
  • 监控覆盖率(Monitoring Coverage):被监控的服务实例数 / 总服务实例数。覆盖率应 ≥ 99.9%。

2.8 阶段间 SLI 依赖关系

下图展示六个阶段之间的 SLI 数据流与依赖关系,帮助理解 SLI 的级联影响。

CI/CD 流水线阶段 SLI 依赖关系 CI/CD 流水线阶段 SLI 依赖关系 代码提交 构建 测试 部署 发布 监控 SLI 级联影响说明: • 提交阶段门禁通过率低 → 构建阶段触发率下降 → 测试阶段样本不足 • 构建成功率低 → 部署阶段无可用制品 → 发布阶段阻塞 • 监控数据完整性差 → 无法准确评估发布阶段灰度验证通过率 • 建议:SLI 阈值设计时需考虑上游阶段 SLI 的波动范围,避免级联误告警

2.9 阶段 SLI 口径设计原则

在定义每个阶段的 SLI 时,需遵循以下三条原则,确保口径可移植、可对比。

  1. 阶段边界清晰:SLI 的起止时间点必须与阶段的实际执行范围对齐,避免将排队等待时间或下游阶段耗时计入当前阶段。
  2. 指标原子化:每个 SLI 只衡量一个维度(如成功率、时长、覆盖率),不要将多个维度混合成一个复合指标。
  3. 阈值可调:不同团队、不同环境(开发/测试/生产)的 SLI 阈值应支持独立配置,但口径计算逻辑保持一致。
关键结论:六个阶段的 SLI 并非孤立存在,它们通过制品流和数据流形成级联依赖。在移植适配时,必须同时考虑阶段内口径和阶段间依赖关系,才能构建出真正可用的流水线 SLI 体系。