2. 发布门禁基础:什么是发布门禁、门禁在CI/CD流水线中的位置
2.1 什么是发布门禁
发布门禁(Release Gate)是部署流水线中一组自动化的质量检查关卡。每个门禁代表一个必须满足的准入条件——只有通过所有检查,构建产物才能进入下一阶段或最终发布到生产环境。门禁的本质是“卡点”,它将人工判断转化为可编程、可度量的规则,防止有缺陷或不符合标准的代码流入用户侧。
核心定义:发布门禁 = 自动化检查点 + 阻断机制 + 可审计记录。它确保每次发布都经过统一、可重复的质量验证,而非依赖个人经验或临时检查。
2.2 门禁的典型检查维度
一个完整的发布门禁通常覆盖以下维度,每个维度对应一个或多个检查项:
| 维度 | 检查项示例 | 阻断条件 |
|---|---|---|
| 代码质量 | SonarQube 质量阈、代码覆盖率、重复率 | 覆盖率 < 80% 或 blocker 级别问题未清零 |
| 安全合规 | SAST/DAST 扫描、依赖漏洞检查、密钥泄露检测 | 存在高危及以上漏洞 |
| 测试通过率 | 单元测试、集成测试、E2E 测试 | 任何一条关键用例失败 |
| 性能基线 | 接口响应时间、吞吐量、资源消耗 | P99 延迟超过基线 20% |
| 变更合规 | 审批记录、变更单关联、版本号规范 | 缺少对应审批或版本号不匹配 |
实践建议:门禁规则应随项目成熟度逐步收紧。初期可只设置“测试通过 + 无高危漏洞”两个硬性门禁,后续再叠加性能和安全维度,避免因门禁过严导致流水线频繁阻塞。
2.3 门禁在CI/CD流水线中的位置
发布门禁并非孤立存在,它嵌入在流水线的关键阶段之间。下图展示了标准 CI/CD 流水线中门禁的典型部署位置:
关键观察:门禁通常部署在“阶段转换点”上。上图中红色门禁分别位于:构建→测试之间(代码质量)、测试→制品之间(安全)、测试环境→生产之间(性能)、生产发布→灰度之间(审批)、灰度→全量之间(灰度准入)。每个门禁阻断不合格的产物进入下一阶段。
2.4 门禁的两种触发模式
根据检查时机和阻断方式,门禁可分为同步门禁和异步门禁:
| 模式 | 触发时机 | 阻断方式 | 典型场景 |
|---|---|---|---|
| 同步门禁 | 流水线执行过程中,阶段完成后立即触发 | 直接失败,流水线停止,不进入下一阶段 | 编译失败、单元测试失败、代码规范检查 |
| 异步门禁 | 流水线执行后,由外部系统或定时任务触发 | 标记为“待审批”或“待验证”,流水线暂停等待结果 | 安全扫描报告生成、人工审批、性能压测报告 |
常见误区:不要将所有门禁都设为同步模式。对于耗时较长的检查(如全量安全扫描、性能压测),应使用异步门禁配合回调机制,避免流水线长时间阻塞。同步门禁只适用于秒级或分钟级可完成的检查。
2.5 门禁与灰度发布的关系
发布门禁是灰度发布的前置条件。在灰度发布流程中,门禁承担两个关键角色:
- 准入控制:只有通过所有前置门禁的版本,才有资格进入灰度发布流程。这确保了灰度环境不会接收到低质量或存在安全风险的版本。
- 灰度期间持续验证:灰度发布过程中,门禁系统持续监控灰度环境的指标(错误率、延迟、业务转化率),一旦指标恶化,自动触发回滚或暂停灰度。
下图展示了门禁与灰度发布的衔接关系: