4. 构建阶段 SLI 口径设计:构建成功率、构建时长 P50/P95/P99、构建资源消耗(CPU/内存)

构建阶段是 Jenkins 流水线的核心执行单元,直接反映代码从提交到制品的转化效率。本章聚焦三个关键 SLI:构建成功率、构建时长分位数、构建资源消耗,并给出可落地的口径定义与计算公式。

4.1 构建成功率(Build Success Rate)

构建成功率衡量流水线中构建步骤的稳定程度,是团队交付节奏的基础指标。低成功率意味着频繁的构建失败,需要立即排查环境、依赖或代码问题。

SLI 名称 口径定义 公式
构建成功率 在统计周期内,构建步骤最终状态为成功的次数占总执行次数的比例 构建成功率 = 成功构建次数 / 总构建执行次数 × 100%
重试后成功率 包含自动重试后最终成功的构建次数占比(排除基础设施抖动) 重试后成功率 = (成功构建次数 + 重试后成功次数) / 总构建执行次数 × 100%
口径注意点:
  • “成功”指 Jenkins 构建步骤返回 SUCCESS 状态,排除 UNSTABLE 或 ABORTED。
  • 统计周期建议按天或按发布窗口聚合,避免跨周对比失真。
  • 重试后成功率更适合 SRE 团队评估平台稳定性,开发团队应关注原始成功率。

4.2 构建时长 P50/P95/P99

构建时长分位数反映不同百分位下的构建耗时,P50 代表典型体验,P95/P99 代表长尾问题。通过分位数可以精准定位构建瓶颈。

SLI 名称 口径定义 公式
构建时长 P50 统计周期内,所有成功构建耗时的中位数 P50 = 排序后第 50% 位置的构建耗时
构建时长 P95 统计周期内,95% 的构建耗时低于此值 P95 = 排序后第 95% 位置的构建耗时
构建时长 P99 统计周期内,99% 的构建耗时低于此值 P99 = 排序后第 99% 位置的构建耗时
计算示例: 假设某天有 200 次成功构建,耗时排序后:
  • 第 100 个值(200 × 50%)为 3 分 20 秒 → P50 = 200s
  • 第 190 个值(200 × 95%)为 8 分 45 秒 → P95 = 525s
  • 第 198 个值(200 × 99%)为 15 分 30 秒 → P99 = 930s

P99 与 P50 差距越大,说明长尾构建问题越严重,需要排查大项目或慢步骤。

构建时长分位数分布示意图 构建耗时(秒) 累积百分比 P50 ~200s P95 ~525s P99 ~930s P50 代表典型构建体验,P95/P99 暴露长尾慢构建,是优化重点

4.3 构建资源消耗(CPU / 内存)

构建资源消耗 SLI 用于评估 Jenkins Agent 的负载情况,帮助团队合理规划资源配额、识别资源争抢或泄漏问题。

SLI 名称 口径定义 公式
CPU 使用率(均值) 构建过程中 Agent 的 CPU 平均使用百分比 CPU 均值 = Σ(每 10s 采样 CPU%) / 采样次数
CPU 使用率(峰值) 构建过程中 Agent 的 CPU 最大使用百分比 CPU 峰值 = max(每 10s 采样 CPU%)
内存使用量(均值) 构建过程中 Agent 的内存平均使用量(MB) 内存均值 = Σ(每 10s 采样内存 MB) / 采样次数
内存使用量(峰值) 构建过程中 Agent 的内存最大使用量(MB) 内存峰值 = max(每 10s 采样内存 MB)
采集与口径注意事项:
  • 采样频率建议 10s 一次,避免高频采样影响 Agent 性能。
  • 指标应绑定构建 ID(BUILD_TAG),便于关联具体构建日志。
  • 内存使用量建议使用 resident set size (RSS),排除缓存干扰。
  • CPU 使用率超过 80% 持续 5 分钟以上,应触发资源告警。

4.4 构建资源消耗 SLI 口径公式汇总

以下表格汇总了构建阶段三个核心 SLI 的完整口径公式,便于团队统一接入监控平台。

SLI 类别 SLI 名称 口径公式(PromQL / 伪代码)
构建成功率 原始成功率 sum(jenkins_build_result{result="SUCCESS"}) / sum(jenkins_build_result) * 100
构建成功率 重试后成功率 (sum(jenkins_build_result{result="SUCCESS"}) + sum(jenkins_build_retry_success)) / sum(jenkins_build_result) * 100
构建时长 P50 / P95 / P99 histogram_quantile(0.50, sum(rate(jenkins_build_duration_seconds_bucket[1d])) by (le))
构建资源消耗 CPU 均值 avg(rate(node_cpu_seconds_total{mode!="idle"}[5m])) by (instance)
构建资源消耗 内存峰值 max(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) by (instance)
实战建议:
  • 构建成功率 SLI 建议设置 ≥ 95% 为目标,低于 90% 触发 P0 告警。
  • 构建时长 P95 目标值根据项目复杂度设定,Java 项目建议 ≤ 10 分钟,前端项目 ≤ 3 分钟。
  • 资源消耗 SLI 应结合 Agent 规格设定阈值,例如 4C8G 的 Agent,CPU 峰值超过 90% 持续 2 分钟需扩容。
构建阶段 SLI 数据采集与计算流程 Jenkins Agent 构建执行环境 指标采集器 Prometheus / Telegraf 时序数据库 VictoriaMetrics / Thanos 10s 采样 写入 SLI 计算引擎 PromQL / 自定义脚本 SLI 输出 成功率 / 时长 / 资源 采集 → 存储 → 计算 → 输出 全链路延迟 < 30s

4.5 构建阶段 SLI 口径设计检查清单

  • 成功率:是否区分原始成功与重试后成功?是否排除 UNSTABLE 状态?
  • 时长分位数:是否使用 Histogram 类型指标?分位窗口是否与统计周期一致?
  • 资源消耗:采样频率是否合理?是否绑定构建 ID 用于回溯?
  • 口径文档化:每个 SLI 是否在团队 Wiki 中记录口径公式、采集方式和阈值?
  • 告警联动:SLI 是否与告警规则绑定?P95 超阈值是否自动触发构建队列分析?
最佳实践: 建议将构建阶段 SLI 口径以 YAML 形式存储在代码仓库中,通过 GitOps 方式管理口径变更,确保可追溯、可审计。