门禁系统基础

什么是发布门禁

发布门禁(Deployment Gate)是 CI/CD 流水线中用于阻断或放行制品流转的自动化检查点。它像一道闸门:只有满足预设条件的构建产物才能通过,否则流水线会暂停或失败,防止有缺陷的代码进入下一阶段。

核心思想: 将人工审批转化为可编程的自动化断言,在关键节点(如合并到主干、部署到预发、上线生产)前强制验证。

门禁不是简单的“通过/不通过”开关,而是一个可组合的规则引擎。每个门禁背后可以绑定一个或多个检查器(Checker),例如:

  • 单元测试覆盖率 < 80% → 阻断
  • 安全漏洞数量 > 0 → 阻断
  • 健康检查端点返回非 200 → 阻断

门禁在 CI/CD 流水线中的位置

门禁通常部署在流水线的三个关键衔接点,形成“左移检查 + 右移验证”的防护网。下表展示了典型流水线阶段与门禁的对应关系:

流水线阶段 门禁位置 典型检查项 阻断后果
代码提交 → 构建 Pre-commit / Merge Gate 代码风格、静态分析、单元测试 禁止合并 PR
构建 → 制品库 Artifact Gate 镜像漏洞扫描、依赖许可检查 制品不上传仓库
制品 → 生产环境 Deployment Gate 健康检查、性能基线、金丝雀指标 回滚或暂停发布

下图展示了门禁在典型 CI/CD 流水线中的具体位置与流转关系:

门禁在 CI/CD 流水线中的位置 代码提交 构建 & 测试 制品发布 生产部署 门禁 门禁 门禁 阻断反馈 门禁位于阶段衔接处,阻断时反馈给上游(如阻止 PR 合并或触发回滚),放行时制品继续流转。

门禁的常见类型

根据检查维度,门禁可分为三大类。在实际流水线中,它们通常组合使用:

门禁类型 检查目标 典型工具 / 协议 阻断条件示例
质量门禁 代码与制品质量 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 以及自定义检查器的实现细节。

下图展示了三类门禁在流水线中的典型覆盖范围与检查顺序:

三类门禁的流水线覆盖范围 流水线时间线 质量门禁 代码提交 → 构建阶段 安全门禁 构建完成 → 制品仓库 健康门禁 部署前 / 金丝雀阶段 三类门禁按流水线阶段依次生效:质量门禁左移拦截代码缺陷,安全门禁阻断带毒制品,健康门禁在最后关口验证运行时可用性。 健康门禁是生产发布的最后一道防线,也是本课程的核心主题。
常见误区: 不要将健康门禁与监控告警混为一谈。门禁是发布前的阻断检查,而监控是发布后的持续观测。健康门禁失败应阻止流量进入,而非仅发出告警。