Files
story/docs/remote-ci-supply-chain-evidence.md
2026-08-26 06:57:12 +08:00

3.1 KiB
Raw Permalink Blame History

远程CI供应链一致性证据

1. 目标与边界

cmd/ci-supply-chain-conformance把固定源提交的托管CI运行、构建与安全检查、镜像摘要及CycloneDX SBOM形成remote-ci-supply-chain-conformance-report-v1。本地执行可以验证JSON协议和校验器,但报告固定为LOCAL_CI_TOOLCHAIN/external_validation_required=true,不能把开发机结果冒充远程供应链验收。

该门禁证明“报告中的远程运行和制品身份彼此一致”,不自动证明业务审批、真实设备体验或生产部署已经完成。发布负责人仍需从受控仓库、制品库和CI系统导出事实,不得手工填造不存在的运行或摘要。

2. 最小证据集

真实采集必须绑定候选版本、发布包使用的sha256构建摘要、40或64字符完整源提交、仓库、工作流、运行编号、HTTPS运行地址、触发类型、ref、尝试次数、成功结论、时间线、执行人及不同的复核人。

14项检查必须唯一且全部PASS:

  1. Go格式、Go vet与测试;
  2. OpenAPI类型生成、Web类型检查与构建、Compose校验;
  3. 后端与Web镜像构建;
  4. Go漏洞/许可证、前端漏洞/许可证;
  5. 仓库密钥、基础设施配置、后端镜像和Web镜像扫描;
  6. CycloneDX SBOM生成。

制品还必须包含后端、Web两个不可变镜像摘要,以及SOURCE、BACKEND_IMAGE、WEB_IMAGE三份CYCLONEDX_JSON文件摘要。检查日志、镜像制品和SBOM均需提供可追溯证据引用。

3. 采集与校验

仓库CI会上传三份SBOM和build-metadata.json,其中记录完整提交、运行编号和两个本次构建镜像ID。正式发布若将镜像推入制品库,应以制品库返回的不可变清单摘要为准,并保证采集中的build_digest与证据包候选一致。

CI从OpenAPI版本生成候选版本,并把候选版本、GITHUB_SHA和UTC构建时间同时写入后端二进制及后端/Web镜像的OCI version/revision/created标签。生成build-metadata.json前会重新读取并逐项比对两个镜像标签;标签为空、提交不一致或构建时间漂移时,流水线直接失败,不能产出候选供应链证据。

下载运行日志、构建元数据、SBOM和制品库摘要后,按remote-ci-supply-chain-capture-v1整理采集,再执行:

go run ./cmd/ci-supply-chain-conformance `
  -capture E:\evidence\remote-ci-capture.json `
  -candidate-version 0.64.0-rc.1 `
  -build-digest sha256:<64位摘要> `
  -source-commit <40或64位提交> `
  -output E:\evidence\remote-ci-report.json

将报告作为REMOTE_CI_SUPPLY_CHAIN首个文件并设为VERIFIED。发布证据包会重新检查候选、构建摘要、源提交、11项报告内一致性检查、14项CI结果、两个镜像摘要和三份SBOM;任何缺失都拒绝VERIFIED,且此门禁不可豁免。

本地协议冒烟只运行:

.\scripts\smoke-ci-supply-chain-conformance.ps1

该脚本不访问GitHub、不构建镜像、不修改业务数据,只证明本地校验工具可运行,并明确保留外部验证要求。