门禁系统基础
什么是发布门禁
发布门禁(Deployment Gate)是 CI/CD 流水线中用于阻断或放行制品流转的自动化检查点。它像一道闸门:只有满足预设条件的构建产物才能通过,否则流水线会暂停或失败,防止有缺陷的代码进入下一阶段。
核心思想: 将人工审批转化为可编程的自动化断言,在关键节点(如合并到主干、部署到预发、上线生产)前强制验证。
门禁不是简单的“通过/不通过”开关,而是一个可组合的规则引擎。每个门禁背后可以绑定一个或多个检查器(Checker),例如:
- 单元测试覆盖率 < 80% → 阻断
- 安全漏洞数量 > 0 → 阻断
- 健康检查端点返回非 200 → 阻断
门禁在 CI/CD 流水线中的位置
门禁通常部署在流水线的三个关键衔接点,形成“左移检查 + 右移验证”的防护网。下表展示了典型流水线阶段与门禁的对应关系:
| 流水线阶段 | 门禁位置 | 典型检查项 | 阻断后果 |
|---|---|---|---|
| 代码提交 → 构建 | Pre-commit / Merge Gate | 代码风格、静态分析、单元测试 | 禁止合并 PR |
| 构建 → 制品库 | Artifact Gate | 镜像漏洞扫描、依赖许可检查 | 制品不上传仓库 |
| 制品 → 生产环境 | Deployment Gate | 健康检查、性能基线、金丝雀指标 | 回滚或暂停发布 |
下图展示了门禁在典型 CI/CD 流水线中的具体位置与流转关系:
门禁的常见类型
根据检查维度,门禁可分为三大类。在实际流水线中,它们通常组合使用:
| 门禁类型 | 检查目标 | 典型工具 / 协议 | 阻断条件示例 |
|---|---|---|---|
| 质量门禁 | 代码与制品质量 | SonarQube、JUnit、覆盖率工具 | 新增代码覆盖率 < 80% |
| 安全门禁 | 漏洞与合规风险 | Trivy、Snyk、OWASP ZAP | 存在 Critical 级别 CVE |
| 健康门禁 | 运行时服务可用性 | HTTP / TCP / gRPC 健康检查 | 端点返回 503 或超时 |
1. 质量门禁
质量门禁关注“代码写得好不好”。它通常在构建阶段或 PR 合并前触发,检查项包括:
- 代码规范违规数
- 单元测试通过率与覆盖率
- 重复代码比例
- 圈复杂度阈值
2. 安全门禁
安全门禁关注“制品有没有毒”。它通常在制品打包后、上传仓库前执行:
- 操作系统级漏洞扫描(CVE)
- 第三方依赖许可合规
- 密钥硬编码检测
- 容器镜像签名验证
3. 健康门禁
健康门禁关注“服务能不能用”。它通常部署在发布到生产环境之前或金丝雀阶段,直接对目标实例发起网络探测:
- HTTP(S) 探测: 检查 /healthz 或 /ready 端点状态码
- TCP 探测: 检查端口是否监听
- gRPC 探测: 调用预定义的 Health/Check RPC
- 自定义脚本: 执行数据库连接测试或业务断言
课程聚焦: 本课程后续章节将重点展开健康门禁的多协议配置,包括 HTTP、TCP、gRPC 以及自定义检查器的实现细节。
下图展示了三类门禁在流水线中的典型覆盖范围与检查顺序:
常见误区: 不要将健康门禁与监控告警混为一谈。门禁是发布前的阻断检查,而监控是发布后的持续观测。健康门禁失败应阻止流量进入,而非仅发出告警。