4. 制品供应链概述:从代码提交到生产部署的完整链路

制品供应链(Artifact Supply Chain)是 DevOps 与 SRE 实践中的核心数据流。每一次代码提交都会触发一系列自动化环节,最终生成可部署的制品并交付至生产环境。理解这条链路的每个环节,是定义误差预算、配置基线同步以及 Terraform 管理策略的前提。

4.1 从代码提交到生产部署的完整链路

下图展示了制品供应链的典型端到端流程,包含 7 个关键阶段:

制品供应链完整链路流程图 制品供应链完整链路(代码提交 → 生产部署) 代码提交 CI 构建 单元测试 制品打包 制品仓库 部署测试 生产部署 关键说明: • 每个阶段都可能产生误差预算消耗(构建失败、测试超时、部署回滚等)。 • 制品仓库是供应链的“单一可信源”,所有下游部署都基于仓库中的制品版本。 • 生产部署前必须经过至少一个部署测试环境(如 staging)的验证。 • Terraform 管理的基线配置需要与制品版本号、仓库地址、部署环境强绑定。
SRE 视角: 供应链中每个环节的失败率都会累积到总误差预算中。例如,CI 构建失败率 2%、部署测试失败率 1%,则整体交付成功率约为 97%。Terraform 配置基线需要为每个环节定义明确的误差预算阈值。

4.2 关键制品类型

在制品供应链中,不同技术栈会产生不同类型的制品。下表对比了三种最常见的制品类型及其在供应链中的角色:

制品类型 典型格式 仓库/注册表 供应链位置 基线同步要点
容器镜像 OCI Image (Docker v2) Harbor, ECR, ACR, GCR CI 构建后 → 制品仓库 → 部署 镜像标签策略、签名验证、漏洞扫描基线
Helm Chart tgz / OCI Artifact Harbor, OCI Registry, ChartMuseum CI 打包后 → Chart 仓库 → 部署 Chart 版本号、values 基线、依赖锁文件
二进制包 .jar, .war, .deb, .rpm, tar.gz Nexus, Artifactory, S3 CI 打包后 → 制品仓库 → 部署 包名规范、版本号语义化、校验和基线

4.3 容器镜像:供应链的核心载体

容器镜像是现代云原生应用最普遍的交付格式。一个完整的容器镜像供应链包含以下关键环节:

  • 基础镜像选择: 使用经过安全扫描的官方或内部基础镜像,避免“镜像嵌套”导致的漏洞扩散。
  • 多阶段构建: 构建阶段使用完整 SDK 镜像,运行阶段使用精简镜像,减小攻击面。
  • 镜像签名与验证: 使用 cosign / notation 对镜像进行数字签名,部署时验证签名完整性。
  • 漏洞扫描: 在推送至仓库前和部署前分别进行 CVE 扫描,阻断高危漏洞镜像进入生产。
  • 不可变标签: 使用 Git commit SHA 或语义化版本作为镜像标签,禁止复用 latest 标签。
Terraform 基线配置示例: 在 Terraform 中管理容器镜像的基线策略,包括允许的基础镜像列表、强制签名要求、漏洞严重性阈值等。
# 容器镜像基线策略示例(HCL)
resource "harbor_retention_policy" "app_images" {
  scope = "project/app"
  schedule = "Daily"
  rule {
    tag_matching  = "v*"
    untagged_artifacts = true
    most_recently_pulled = 90
  }
}

resource "cosign_policy" "production" {
  registry = "harbor.internal.io"
  require_signature = true
  allowed_keys = [
    "kms://key-vault/cosign-prod-key"
  ]
}

4.4 Helm Chart:Kubernetes 应用的配置封装

Helm Chart 将 Kubernetes 资源清单、配置模板和依赖关系打包为一个可版本化的制品。在供应链中,Helm Chart 的管理需要关注:

  • Chart 版本化: 严格遵循 SemVer 规范,每次变更都更新 Chart.yaml 中的 version 字段。
  • Values 基线分离: 环境特定的 values 文件(如 values-dev.yaml、values-prod.yaml)与 Chart 包分离存储,由 Terraform 管理基线。
  • 依赖管理: 使用 Chart.lock 锁定子 Chart 版本,避免意外升级导致配置漂移。
  • OCI 分发: 将 Helm Chart 以 OCI Artifact 格式推送到容器镜像仓库,统一制品管理。
Helm Chart 制品供应链结构图 Helm Chart 制品供应链结构 Helm Chart 包 Chart.yaml + templates/ + values/ Chart.lock 依赖锁 环境 Values 基线 Terraform 管理 values-{env}.yaml OCI Registry / ChartMuseum Kubernetes 集群 helm install / helm upgrade Terraform 管理 Chart 版本基线、values 基线、仓库地址和部署参数,确保供应链配置可审计、可回滚。

4.5 二进制包:传统应用的持续交付

对于非容器化应用或遗留系统,二进制包(如 JAR、WAR、DEB、RPM)仍然是主要的交付制品。其供应链管理要点包括:

  • 语义化版本: 遵循 MAJOR.MINOR.PATCH 格式,版本号嵌入包名或元数据中。
  • 制品仓库: 使用 Nexus、Artifactory 或 S3 作为中央存储,配置自动清理策略。
  • 校验和验证: 每个制品发布时生成 SHA256 校验和,部署前验证完整性。
  • 元数据标注: 在制品中嵌入构建时间、Git commit、CI 流水线 ID 等溯源信息。
常见陷阱: 二进制包供应链中容易忽略“依赖链”的版本锁定。例如,一个 JAR 包依赖的第三方库版本变更可能导致生产环境行为不一致。建议使用 Gradle/Maven 的依赖锁文件(如 gradle.lockfile)并纳入 Terraform 基线管理。

4.6 制品供应链与误差预算的关联

在《Terraform 管理制品供应链误差预算台账的配置基线同步》课程中,制品供应链的每个环节都会产生误差预算消耗。下表总结了关键环节的典型误差预算指标:

供应链环节 误差预算指标 典型 SLO 目标 Terraform 基线管理项
CI 构建 构建成功率 ≥ 99.5% 构建超时阈值、重试策略
单元测试 测试通过率 ≥ 99.9% 测试覆盖率基线、失败阈值
制品打包 打包成功率 ≥ 99.8% 制品大小限制、签名验证
制品仓库 仓库可用性 ≥ 99.99% 仓库冗余配置、访问控制
部署测试 部署成功率 ≥ 99.0% 部署超时、回滚策略
生产部署 部署成功率 ≥ 99.9% 金丝雀比例、自动回滚条件
实践建议: 使用 Terraform 的 terraform_data 资源或外部数据源,将制品仓库中的制品版本号、校验和、签名状态等元数据同步到 Terraform 状态中,实现“配置即制品溯源”。