第30章|CI/CD 的系统设计:从需求到流水线架构(Pipeline as Product)

流水线不是 YAML 堆砌,而是面向研发交付的产品:有用户、有需求、有 SLO、要迭代。 这一章教你从约束出发画出架构:谁在用多快要反馈多严要门禁多少钱与算力——再落到阶段划分、并行策略与治理闭环。

Product

流水线 = 产品

  • 用户:研发、安全、发布经理
  • 指标:耗时、成功率、排队、成本
  • 迭代:backlog + 度量驱动改进
Design

约束驱动架构

  • 合规 → 扫描与审批阶段
  • 单体 vs 多仓 → 复用与触发模型
  • 多语言 → 矩阵与模板库
Principles

设计原则

  • 快反馈:lint 靠前、测试分层
  • fail fast:便宜检查先行
  • 可观测:每阶段可度量

1. 先把「用户故事」写清楚:流水线为谁服务?

没有用户画像的流水线,最后会变成「平台自嗨」:功能很多,研发却只想绕过。 最小要回答四类诉求:

Pipeline as Product 的定义:把流水线当作可度量、可迭代、有 backlog 的内部产品,而不是一次性脚本项目。

2. 从约束推导架构:一张「需求 → 阶段」的映射表

常见约束与典型对策:

  1. 必须过 SAST/SCA → 独立 security stage,失败阻断合并;例外走审批工单。
  2. PR 必须 10 分钟内反馈 → 单测+lint 并行;重任务放 nightly 或 path filter。
  3. 多版本运行时 → matrix;共享缓存 key 按版本拆分。
  4. 合规审计 → 每次运行关联 commit、审批人、制品 digest,日志保留策略。
约束 → 架构决策:从业务规则推导流水线形状 同一套工具,不同约束会得到不同的阶段划分与门禁强度 Constraint 10min PR SLA compliance Architecture choice fast path: lint+unit parallel heavy: scheduled / path filter gates: required checks Pipeline shape stages + parallelism + cache observability hooks Example mapping SOC2 → artifact signing + immutable registry + audit log retention mobile → device farm stage · monorepo → affected projects only multi-tenant SaaS → per-customer deploy approval + environment isolation document decisions in ADR (Architecture Decision Record)
图 1:约束驱动设计。先列不可妥协的规则(SLA、合规、成本),再决定阶段、并行与门禁,而不是先抄一份模板 YAML。

3. 阶段划分:一条「从提交到交付」的价值流

典型阶段(可按团队裁剪):

  1. Prepare:检出、依赖恢复、缓存命中。
  2. Quality fast:format、lint、单测(并行)。
  3. Build & test deep:集成测、契约测、E2E(可矩阵、可夜间)。
  4. Security & compliance:SAST、SCA、license、SBOM。
  5. Package:镜像/制品、签名、版本元数据。
  6. Deploy:按环境晋级 + 审批 + 观测门禁。
fail fast:越便宜、越快暴露问题的检查越靠前;越贵、越慢的越靠后或抽样。
价值流阶段:快反馈在前,重验证与发布在后 箭头表示主流程;虚线表示失败早停或异步反馈 prepare cache fast lint unit deep int e2e sec SAST SCA package sign SBOM deploy promote fail fast → stop pipeline metrics per stage
图 2:阶段价值流。前置阶段负责快反馈;安全与制品在合并前或发布前卡点;部署阶段与观测、审批联动。

4. SLO 与体验:流水线也要「可用性」

给流水线定义 SLI,避免只凭感觉优化:

产品闭环:backlog → ship → measure → improve 与业务产品一样:迭代节奏 + 数据说话 iterate backlog from teams ship templates metrics dashboard prioritize top pain DX metrics (examples) time-to-first-feedback retry rate / flake rate cost per successful merge treat regression as incident
图 3:Pipeline as Product 迭代环。用指标驱动 backlog,发布模板与门禁改进,而不是一次性大重构。

5. 治理与所有权:谁改流水线?谁背锅?

6. 最小设计清单(开工前过一遍)

  1. 列出不可妥协约束(SLA、合规、成本上限)。
  2. 画用户与触发矩阵(PR / main / tag / manual)。
  3. 划分阶段并标「快/慢」「阻断/建议」。
  4. 定义 3~5 个流水线 SLI 与看板。
  5. 指定 owner 与变更评审规则。
← 上一章:Helm / Kustomize 下一章:GitHub Actions 入门 →