3、发布质量门禁概述
3.1 门禁的定义
发布质量门禁(Quality Gate)是嵌入在 CI/CD 流水线中的自动化检查点,用于在软件交付的特定阶段对制品或代码进行预定义的质量评估。只有通过所有门禁规则的构建或发布请求,才能继续向下游环境流转;未通过的变更将被自动阻断,并触发告警与回滚流程。
核心定义:门禁 = 检查规则 + 阈值条件 + 阻断/通过决策。它本质上是将人工审核经验转化为可编程的、可重复执行的自动化断言。
3.2 门禁在 CI/CD 流水线中的位置
门禁通常部署在流水线的关键上下游衔接处,形成“检查-决策-放行”的闭环。下表列出了最常见的门禁部署位置及其职责:
| 流水线阶段 | 门禁位置 | 典型检查项 | 阻断影响 |
|---|---|---|---|
| 代码提交 | PR/MR 合并前 | 代码规范、单元测试覆盖率、安全扫描 | 阻止合并请求 |
| 构建阶段 | 制品生成后 | 编译成功率、依赖漏洞、制品签名 | 阻止制品进入制品库 |
| 测试阶段 | 集成测试/端到端测试后 | SLO 达成率、错误预算消耗、性能基线 | 阻止部署到预发环境 |
| 预发验证 | 预发环境部署后 | 金丝雀指标、错误率、延迟 P99 | 阻止全量发布 |
| 生产发布 | 灰度/全量前 | 发布窗口、变更审批、回滚就绪 | 阻止生产变更 |
下图展示了门禁在典型 CI/CD 流水线中的串联关系:
3.3 门禁的通过/阻断逻辑
门禁的决策模型是一个确定性的布尔逻辑引擎。每个门禁包含一组规则,每条规则独立评估,最终通过聚合逻辑输出“通过”或“阻断”。
3.3.1 单规则评估模型
每条规则由三个要素组成:
- 指标源:从监控系统、测试框架或代码扫描工具获取的原始数据(如:错误率、P99 延迟、覆盖率)。
- 比较运算符:大于、小于、等于、在区间内等。
- 阈值:静态值或动态 SLO 基线(如:错误率 ≤ 0.1%、P99 ≤ 200ms)。
示例规则:如果
http_request_error_rate > 0.5%,则规则结果为 FAIL,否则为 PASS。
3.3.2 多规则聚合逻辑
门禁支持三种聚合模式,以适应不同场景的严格程度要求:
| 聚合模式 | 逻辑 | 适用场景 | 阻断条件 |
|---|---|---|---|
| AND(全部通过) | 所有规则必须为 PASS | 安全扫描、合规检查 | 任意一条 FAIL 即阻断 |
| OR(任一通过) | 至少一条规则为 PASS | 灰度放行、紧急发布 | 全部 FAIL 才阻断 |
| WEIGHTED(加权评分) | 每条规则赋予权重,计算总分 | SLO 驱动的质量评分 | 总分低于阈值则阻断 |
3.3.3 门禁决策流程图
下图展示了门禁从指标采集到最终决策的完整执行流程:
3.3.4 阻断后的处理策略
当门禁判定为阻断时,系统自动执行以下动作:
- 立即停止流水线:阻止当前 Job 继续执行,防止有缺陷的制品进入下一环境。
- 记录阻断上下文:将触发阻断的规则名称、实际值、阈值、时间戳写入发布审计日志。
- 发送告警通知:通过即时通讯工具(如钉钉、Slack)或邮件通知发布负责人和 SRE 值班人员。
- 提供修复建议:在门禁结果页面展示失败规则的详细信息和常见修复指引。
注意:门禁阻断不是惩罚,而是保护。它确保只有满足 SLO 质量基线的变更才能进入生产环境,从而降低故障风险。门禁规则应定期复审,避免因阈值过严导致发布阻塞,或过松失去保护意义。