研究报告 · 约 24,617 字 · 预计推送 3 部分

CI/CD 流水线设计:从 lint、test、build 到发布、回滚、制品留存的最小闭环——发展脉络 × 2026 横向对比综合报告 未开始

目录

题记与说明

课题:CI/CD 流水线设计:从 lint、test、build 到发布、回滚、制品留存的最小闭环
本文性质:两份章节报告的综合定稿——纵轴章(发展史,检索日 2026-11-01)与横轴章(2026-11-01 时间截面上的系统性横向对比,检索日同日)。综合时已完成三项工作:① 合并两章重复表述(六环节定义、GitHub/GitLab 制品留存参数、JetBrains 2026 调研数据、GitOps 回滚叙述,各只保留一处);② 消除口径分歧(采用率数据保留横轴章"第三方转引、未直接抓取原报告"的口径警告);③ 补上纵轴叙事缺位、由横轴章独有的事实(2025–2026 GitHub Actions 定价风波),使"免费经济学"线索在时间轴上闭合。来源链接方面,绝大多数原始来源链接已保留;少数初稿仅有检索摘要、无法给出可直接点开原始 URL 的条目(共 4 条,见参考来源逐条注明)。各条目的核验状态沿用原章节标注;本稿为按独立审读意见(8 条)逐条修订后的最终稿(修订要点见文末「修订说明」),修订中新增/更正的引用已于 2026-11-01 当日实际抓取或检索核实,其余原始页面未重新抓取。

TL;DR

CI/CD 最小闭环(lint→test→build→发布→回滚→留存)非一次设计,而是 2001–2024 年六波力量补齐:自动构建、交付与回滚理论、容器与流水线即代码、平台内置 CI/CD、SLSA/Sigstore 制品签名,直至 AI 代理进流水线"守门"。2026 年:前三环已同质化,选型差异集中在发布、回滚、留存;GitHub Actions(33%)是最短路径,GitLab(19%)六环节原生度最高,Jenkins(28%)存量第二但下滑。要点:发布制品长存、中间产物显式设短保留期(平台 90/30 天默认只作兜底,而非默认策略);K8s 用 GitOps 使 git revert 即回滚;成本模型纳入自建 runner 计费与否;AI 代码走与人相同门禁。

纵轴:发展脉络

口径先行:什么叫"最小闭环"

本课题的"最小闭环"指一条软件交付流水线中不可或缺的六个环节:lint(静态检查)→ test(自动化测试)→ build(构建)→ release(发布)→ rollback(回滚)→ 制品留存。它的关键判据不是"哪家跑测试更快",而是"这六个环节能否在同一个平台内以原生能力或一条可审计的链路闭合,而不需要拼接大量外部系统"。这条闭环不是某一天被某家公司一次性设计出来的,而是在二十五年里由六波不同性质的力量逐段补齐的:先是"自动构建"(CI 服务器),然后是"交付理论"(持续交付),接着是"流水线即代码"与容器化,再是"平台内置 CI/CD",然后是"供应链与制品签名",最后是 AI 代理进入流水线。下面按时间分六个阶段重走这条纵轴。

两点口径说明("六波"与六个阶段的对应关系):① 六波与六个阶段是近似对应而非严格的一一映射——"供应链与制品签名"一波横跨阶段四与阶段五,而 Nexus/Artifactory 开启的制品仓库潮内嵌于阶段二的叙述中、不单独占一波;② 部分标志性事件按主题而非年份区间归段(下列为代表性例子、并非封闭清单)——Fowler 2006-09 的《Continuous Integration》作为阶段一参与者的理论收束提前写入阶段一,2005 年 Hudson、2014 年首份 State of DevOps 报告与 2014-06-25 的《CanaryRelease》按主题归入阶段二,2018 年 Intuit 开源 Argo CD 与《Accelerate》出版按主题归入阶段三,2022-04 Vercel 收购 Turborepo 因承接阶段四"缓存经济学"线索而记在阶段四。

阶段一(1991–2005):概念前史与第一台 CI 服务器

"持续集成"作为一种说法,最早可追溯到 Grady Booch 1991 年方法论著述中对 CI 一词的使用(此细节据 Wikipedia「Continuous integration」词条转述,未独立核验原书)。2001-03-30,CruiseControl 首次发布:这个 Java 框架由 ThoughtWorks 的 Matt Foemmel 创建,被广泛认为是第一款得到普遍使用的持续集成服务器(Wikipedia: CruiseControl;SourceForge 官方站点)。它把"定时从版本库拉代码 → 编译 → 跑测试 → 把结果反馈给团队"固化成一台服务器上的常驻进程,后来衍生出 .NET 版本 CruiseControl.NET 并带有几十个插件。lint 环节的前史则是 2002 年 Douglas Crockford 发布 JSLint——这是 lint 进入 JavaScript 世界并对后世工具谱系(JSHint → ESLint)产生决定性影响的起点(lint 谱系据 ESLint 官方关于页 与 Wikipedia 回溯)。

主要参与者:ThoughtWorks(CruiseControl、以及 CI 理论的布道者 Martin Fowler)、Crockford(lint)。驱动因素是 XP/敏捷运动强调"每天向主干提交、每次提交都要被构建验证"——Martin Fowler 2006 年 9 月发表的《Continuous Integration》给出了 CI 的经典定义与十项实践(单一源码库、自动化构建、自测试构建、快速反馈、每人每天提交主干、每次提交触发构建等),成为此后二十年的理论底稿(martinfowler.com,2024 年仍有更新;本文按主题将其作为阶段一的收束提前叙述,见上文口径说明)。

本阶段闭环完成度:只有 build+test 的"自动运行",没有发布、没有回滚、没有制品留存——构建产物用完即弃。

阶段二(2006–2012):CI 服务器大普及、CD 理论化、"回滚"被命名

驱动因素:GitHub(2008 年上线)让"每次提交都在别人的服务器上构建一次"变成零运维成本的默认行为;SaaS 化把 CI 从"自建机房里的一台 Jenkins"变成"网页上一个绿色对勾"。本阶段闭环完成度:lint/test/build(自动触发 + 托管化)成熟,release/rollback 有了理论模式与制品归属地,但仍需大量人工接线。

阶段三(2013–2017):容器化与"流水线即代码"

驱动因素:微服务架构与 Kubernetes(2015 年开源)让环境一致性成为生死问题;流水线配置爆炸逼出了"配置即代码"。本阶段闭环完成度:六要素全部有了工程化形态,且 lint、build、release、rollback 均实现"声明式、可版本化"。

阶段四(2018–2021):平台内置 CI/CD 与缓存经济学

驱动因素:开发者体验竞争(谁的流水线离代码最近)、CI 分钟数成本与速率限制的经济压力、供应链攻击的持续加码。

阶段五(2022–2024):lint 提速革命与制品签名为王

阶段六(2024–2026 至今):AI 代理进入流水线,闭环回到"守门"本义

AI 编码代理开始成规模地直接向仓库提交 PR,流水线的角色随之向"机器产出的守门员"回归:业界共识是 AI 生成的代码必须走与人完全相同的分支保护、必需检查(required checks)与人工评审门,否则 lint/test 门槛形同虚设;StepSecurity 在 2025 年的分析中点名了"AI 编码代理跑在 GitHub Actions 里"带来的凭据泄露与提示注入等隐性风险(StepSecurity: When AI Meets CI/CD)。GitHub 推出 Agentic Workflows(gh-aw),允许 AI 代理读取 issue/PR 上下文、生成修复并自动开 PR,"从 issue 到生产"的最短路径被进一步压缩——流水线的输入第一次不再必然来自人类(DeployHQ 综述)。

回滚一环在声明式发布成熟后继续下沉:GitOps(Argo CD/Flux 系)下回滚即 git revert + 自动 sync,蓝绿/金丝雀承担"出事前的减损",feature flag 承担"无需重新部署的功能级止损",三者共同构成现代发布安全网(GitOps 与 Argo CD 溯源)。平台格局(2026-03,JetBrains 调研口径,经第三方转引):GitHub Actions 以约 33% 的组织采用率居首,Jenkins 约 28%、GitLab CI 约 19%;前云时代的 Jenkins 仍靠存量与自托管场景据守第二(JetBrains TeamCity 博客 2026-03;2026 工具对比)。

纵轴收束:六个要素各自"何时长成"

闭环要素雏形现代形态确立标志节点
lintJSLint(2002,本地工具)流水线首道关卡ESLint 2013 可插拔化;Ruff 2022 提速 10–100 倍
testCruiseControl 自动跑测试(2001)PR 必需检查 + 矩阵构建GitHub Actions 2019 GA
buildAnt/Maven 时代(2000 年代)容器镜像 + 内容寻址缓存Docker 2013;Turborepo 2021
release脚本 + 人工声明式 GitOps / 金丝雀蓝绿 2010/金丝雀 2014 命名;Weaveworks 2017;Argo CD 2018
rollback灾难响应动作流水线内建设计项BlueGreenDeployment(2010-03-01)→ git revert 即回滚
制品留存Nexus 2007 / Artifactory 2008平台默认策略 + 可验证 provenanceretention-days 2020-10;Artifact Attestations GA 2024-06-25

三条贯穿性判断(供交叉分析使用):

  1. 闭环的每一段都是"事故先行":回滚模式成型于发布事故的常态化,制品签名成型于 SolarWinds/XZ 式供应链攻击,AI 守门成型于 AI 生成代码的泛滥——最小闭环的进化史是一部"打补丁史"。
  2. 配置的代码化程度单向递增:构建脚本(Ant)→ 流水线文件(Jenkinsfile 2016)→ 环境声明(GitOps 2017)→ 保留策略与签名配置(retention-days、attestation 2020–2024),流水线里曾经"只有管理员能在网页上改"的东西全部变成了可评审、可回退的代码。
  3. 留存与验证是最后的短板,也是当下主战场:前二十年解决"能不能自动跑完",2017–2021 解决"跑得快不快、离代码近不近",2021 年至今解决"留下的制品能不能自证清白",2024 年后解决"当写代码的不是人时,谁来作证"。

横轴:横向对比(2026-11-01 时间截面)

对比框架

对比对象按形态分四类:托管型 SaaS(GitHub Actions、CircleCI、Travis CI);代码托管平台内置(GitLab CI/CD、Azure DevOps Pipelines);自托管经典/开源(Jenkins、Woodpecker CI、Drone CI、TeamCity;其中 Buildkite 为该类目下的混合型——控制面 SaaS + 自备算力);云原生/新范式(Argo CD——GitOps 拉取式 CD、Tekton / Argo Workflows、Dagger)。范围声明:其中 Drone CI、Tekton、Argo Workflows 三个对象因检索所得信息有限,仅作背景提及、不入总对比表(Drone 见维度四的成熟度讨论,Tekton 见维度四的成熟度讨论、Argo Workflows 见维度三的生态讨论);下表覆盖其余十一个对象。对比维度五项:闭环能力覆盖、成本、生态、成熟度、适用场景。核心问题不是"哪家跑测试更快",而是"哪家用最低的成本和最少的粘合代码,把六个环节闭合起来"。

总对比表

平台形态闭环能力(lint→test→build→发布→回滚→留存)免费额度/起步价生态成熟度最适用场景
GitHub Actions托管 SaaS六环节均可原生覆盖:YAML 编排 + Environments 审批发布 + Releases/Packages 留存;回滚无原生按钮(re-run=重放同一次 run,回滚靠 re-deploy 旧 tag 约定)Free 档每月含 $12 计算额度(≈2000 标准分钟);公开仓库免费;自托管 runner 当前不收费Marketplace 生态最大,与 GitHub 深度一体采用率第一(JetBrains 2026 调研 33%)已在 GitHub 上的绝大多数团队,最小闭环首选
GitLab CI/CD平台内置 + 自托管可选六环节原生:.gitlab-ci.yml + Environments 一键 Rollback + 制品 expire_in 留存策略Free 400 计算分钟/月;Premium $29/人/月(含 10,000 分钟);自建 runner 不消耗配额全家桶(issue/registry/安全扫描内置)采用率第三(19%),功能覆盖最全想要单一平台覆盖全 DevOps 的团队、私有化部署需求
Jenkins自托管经典六环节靠 1800+ 插件拼装,回滚/留存需自建脚本开源免费(服务器与维护成本自担)插件生态最庞大但老化老牌、采用率第二(28%)但持续下滑遗留系统、强管控内网、非标构建环境
CircleCI托管 SaaS环节 1-4 强,回滚/发布靠 API 与 orb 生态免费 30,000 credits/月(≈3000 中型 Linux 分钟)Orbs 市场,缓存与资源配置业界最佳成熟(老牌 SaaS CI)构建性能敏感、缓存密集型项目
Azure DevOps Pipelines平台内置六环节覆盖良好,Environments + Approvals + 经典 GUI 双模免费档含 1 个并行作业(私有仓库 1800 分钟/月);额外托管并行作业约 $40/月与 Azure/Microsoft 栈深度绑定成熟,企业存量大.NET/Azure 技术栈、混合流程(Boards+Repos+Pipelines)
Buildkite混合(控制面 SaaS + 自备算力)环节 1-4 强,回滚/留存取决于自建基础设施按席位:Team $9/人/月起,Developer $0(官网 2026-11-01 实测为 Free/Pro $30/Enterprise 三档,此为旧口径,见参考来源)1200+ 插件,AWS 起家成熟算力自主可控 + 托管便利之间取平衡的团队
TeamCity自托管 + 云六环节可覆盖,构建链与构建历史留存强起步 $15/月(含 3 构建配置);本地免费档 3 配置+3 agentJetBrains 生态、IDE 集成好成熟JetBrains 系团队、中小规模自托管
Woodpecker CI自托管开源环节 1-3 轻量覆盖;发布/回滚/留存靠自建开源免费(Apache 2.0),自托管无限分钟较小但活跃,容器原生Drone 血统的社区延续隐私敏感、想摆脱 SaaS 计费的小团队/个人
Travis CI托管 SaaS环节 1-3 可用,整体老化已全面商业化付费生态萎缩遗留仅存量项目维护
Argo CD(CD 侧)自托管,K8s GitOps负责"发布+回滚"两环节:git revert 即回滚,Git 即审计日志开源免费(CNCF Graduated)CNCF 生态核心,Argo Rollouts 金丝雀发布成熟(GitOps 事实标准)K8s 集群的 CD 层,与任一 CI 搭配
Dagger新范式(代码化流水线)用通用编程语言写全流程,六环节均由代码定义开源免费 + 云版本按量语言 SDK(Go/Python/TS 等)较新、快速成长把流水线当软件工程来做的团队,本地/CI 环境一致性

逐维度对比

维度一:六环节能力覆盖。 lint/test/build(环节 1-3)所有主流平台都支持,差异在编排语法与缓存机制:GitHub Actions 用 YAML workflow + actions/cache;GitLab 用 .gitlab-ci.yml + stages;CircleCI 的依赖缓存与资源分级(resource class)被 2026 年多篇对比文章认为是托管平台中原生支持最成熟的;Jenkins 依赖 Jenkinsfile(Groovy)+ 插件,灵活但易腐化。release(环节 4):GitHub Actions 可通过 Environments(环境保护规则、人工审批)+ Releases 原生完成;GitLab 有内置 Container Registry、Package Registry 和 environments;Jenkins、Woodpecker 等需要接外部 registry 与部署脚本。rollback(环节 5)是差异最大的环节(判据:平台是否提供原生回滚动作与防误部署保护,而非"绕道能否实现"):GitLab 提供环境页面的一键 Rollback 按钮——本质是重新运行指向旧 commit 的部署作业,并有 "Prevent outdated deployment jobs" 保护设置(GitLab docs: environments);GitHub Actions 没有专门的回滚按钮,需区分两种做法:re-run 旧的 workflow run 严格说不是回滚而是"重放"——它重跑同一次 run(同一 commit;失败作业重跑沿用原 commit 的 workflow 文件版本,重跑次数受 run 保留期限制,GitHub Docs: Re-run workflows and jobs),适合"上一次部署 run 失败了重试一次",不能把环境送回旧版本;re-deploy 旧 tag/commit 才语义上是回滚——对旧 tag 重新触发部署工作流(如 workflow_dispatch 或重跑该 commit 上一次成功的部署 run),把环境送回旧版本,但要重新走一遍环境审批门,且依赖旧 commit 的部署作业可复现、相关制品仍在保留期内(此为社区惯用约定,官方无一键功能,惯例的普遍程度未独立核验);K8s 场景下 Argo CD 把回滚彻底改写——Git 仓库即期望状态,回滚等于 git revert,GitOps 工具自动对账收敛。制品留存(环节 6):GitHub Actions 默认保留 90 天,retention-days(1-90)可按任务覆盖,私有仓库可放宽至最长 400 天(GitHub Docs;actions/upload-artifact);且 GitHub Releases 的附件不计入 Packages/Actions 存储配额,每个 release 最多 1000 个文件、单文件 2 GiB、总量无上限(GitHub Docs: About releases;社区讨论 #210936);GitLab 制品默认 30 天过期,expire_in 可按任务覆盖,最新 ref 的成功流水线制品会被保留(GitLab Docs: job_artifacts;管理设置);Jenkins/Woodpecker 自托管留存完全自管——磁盘满了就是运维事故。小结:六环节原生覆盖度上 GitLab CI/CD 与 GitHub Actions 并列第一梯队——"并列第一"的判据是"六环节能否在平台内以原生或低胶水成本闭合",而非"每环都有原生按钮":GitLab 六环全原生、回滚有按钮;GitHub 六环亦均可原生达成,唯回滚缺专门按钮、需按约定复用部署机制;CircleCI/Azure DevOps 第二梯队;Jenkins/Woodpecker 需自建环节 5-6;Argo CD 只覆盖环节 4-5,但把这两环做到了最可靠。

维度二:成本。 2026 年 CI/CD 计费的最大事件是 GitHub Actions 定价风波:2025 年 12 月中旬 GitHub 宣布自 2026-03-01 起对自托管 runner 收取 $0.002/分钟的"云平台费"(此前自托管完全免费,社区估算单个 24×7 runner 约多花 $84/月,有公司估算月增 $3.5k),引发强烈反弹后 GitHub 官方宣布推迟该收费,同时 2026-01-01 起托管 runner 降价最多 39%(GitHub Changelog 2025-12-16;官方定价说明;HN 讨论)。截至 2026-11-01,GitHub 官方计费文档(横轴章当日直接抓取 docs.github.com 核实)仍列明:自托管 runner 不消耗包含额度、不收费;免费档每月含 $12 计算额度(按 Linux 2-core $0.006/分钟折算约 2000 分钟)、Pro/Team 含 $18(约 3000 分钟)、Enterprise Cloud 含 $300(约 50,000 分钟);Windows $0.010/分钟、macOS $0.062/分钟;免费档存储 500 MB,超出 $0.25/GB·月。GitLab 侧(横轴章当日直接抓取 docs.gitlab.com 核实):Free 档 400 计算分钟/月,Premium 10,000 分钟/月,Ultimate 50,000 分钟/月;成本因子按 runner 规格放大(Linux small=1、medium=2、large=3、GPU medium=7、macOS M1 medium=6);自建 runner 不消耗计算分钟配额——这是 GitLab 与 GitHub 计费模型的关键差异,解释了重度 CI 团队"GitLab + 全自建 runner"的低成本路线。Premium $29/人/月(年付)来自搜索摘要引用的 GitLab 官方定价页(该页直接抓取超时,价格以官方页为准,about.gitlab.com/pricing)。CircleCI 免费档 30,000 credits/月(1 credit ≈ $0.0006;Linux Medium 资源 10 credits/分钟,约合 3,000 分钟),开源项目可达 400,000 credits/月(circleci.com/pricing 检索)。Buildkite 采用"控制面按席位 + 算力自带"模式(正文旧口径 $0/$9/$19/$35 每人每月四档;官网 2026-11-01 实测为 Free $0(≤5 用户)/ Pro $30 每活跃用户/月 / Enterprise 定制三档,以官网为准,见参考来源),算力成本自担但无分钟数焦虑。Jenkins/Woodpecker/TeamCity 本地版本身免费或低价,真实成本是运维人力。小结:小团队最小闭环的成本最优解通常是"公开仓库 GitHub Actions 免费"或"GitLab Free + 自建 runner";规模化后自建 runner 的计费豁免(GitLab 明确豁免、GitHub 当前状态)是最大的成本杠杆。

维度三:生态。 GitHub Actions 拥有最大的 Marketplace,任何新工具(linters、SAST、云 SDK)默认先发 GitHub Action,这是环节 1-3"零拼装成本"的来源。GitLab 的生态胜在"内置":registry、安全扫描、依赖管理在同一个平台,不需要跨系统粘合。CircleCI 有 Orbs 复用机制。Jenkins 插件超 1800 个但质量参差、升级互踩是最大痛点(semaphore.io;northflank.com)。Woodpecker 社区规模小但路线清晰(Apache 2.0,支持 GitHub/GitLab/Gitea/Forgejo/Bitbucket)。Argo CD 背靠 CNCF Graduated 项目群(Argo Workflows/Rollouts/Events),是 K8s 生态内 CD 侧事实标准。Dagger 代表"用通用编程语言写流水线"的新生态,2026 年已进入多篇 CI-as-code 安全与选型对比文章的主流名单。

维度四:成熟度与采用率。 JetBrains《State of Developer Ecosystem 2026》调研(经第三方文章转引,未直接抓取原报告)显示:GitHub Actions 组织采用率 33%、Jenkins 28%、GitLab CI/CD 19%,CircleCI/TeamCity/Buildkite 各占细分位置。初稿曾并列转引 2026 年对比文章的"GitHub Actions ~85% vs Jenkins 59%→54%"个人开发者口径数字,因未保留来源链接、口径定义不明(年份、样本与统计基数无法确定),本次修订予以删除,只保留定性判断——个人开发者口径的方向与组织口径一致:GitHub Actions 已居首,Jenkins 在缓慢衰退但存量巨大。Travis CI 已边缘化;Drone 被 Harness 收购后开源动能减弱,其社区血统由 Woodpecker CI 延续(2026-07 仍有两者专门对比文章;初稿仅检索摘要、未保留原始链接,见参考来源注明)。Argo CD 与 Tekton 在云原生侧已属成熟;Dagger 仍属早期快速成长。

维度五:适用场景(对本课题的映射)。 个人/小团队、代码在 GitHub:GitHub Actions 是最短路径——lint/test/build 免费、Releases 免费长存、Environments 提供审批门禁,回滚按 re-deploy 旧 tag 的约定即可接受(re-run 只是重放同一次 run,严格说不是回滚)。需要私有化、跨阶段审计一体化:GitLab 的环境回滚按钮 + 内置 registry + expire_in 留存策略是六环节原生度最高的选择,自建 runner 后成本可控。K8s 原生团队:CI 只负责到"构建并推送镜像",发布与回滚交给 Argo CD——git revert 即回滚、Git 历史即审计日志,这是 2026 年最普遍的 CI/CD 分工范式。构建性能敏感/缓存密集:CircleCI 的资源分级与缓存成熟度优于默认配置的 GitHub Actions。遗留系统/强内网管控:Jenkins 仍难替代,但对维护成本要有清醒预期。算力主权诉求:Buildkite(控制面托管+算力自备)或 Woodpecker(纯自托管开源)。

横向四判断

  1. 闭环的重心正在从 CI 向"发布+回滚"两环倾斜。 lint/test/build 在所有主流平台已同质化,真正的选型差异集中在环节 4-6:GitLab 的环境回滚、GitHub 的 Releases 免费留存、Argo CD 的 GitOps 回滚,构成三种典型的"闭环收口"方式。
  2. 制品留存是免费的还是昂贵的,取决于你把"发布制品"和"流水线中间产物"放在哪里。 GitHub 上两者待遇天差地别(Releases 不计配额 vs Actions 制品 90 天+存储费);GitLab 统一按 30 天过期但可覆盖。最小闭环应明确"最终制品进 Release/Registry 长存、中间产物短保留"的双层留存策略。
  3. 2026 年的定价信号表明托管 CI 的"免费午餐"正在被重新定价。 GitHub 对自托管 runner 收费的尝试虽被推迟,但方向已亮明;GitLab 对自建 runner 的豁免、Buildkite 的 BYO-Compute 模式、Woodpecker 的纯开源路线,都是对"计算费=平台税"这一趋势的对冲。选型时应把"自建 runner 是否计费"作为长期成本模型的显式变量。
  4. "最小闭环"本身可以分层实现。 最务实的推荐路径:GitHub Actions(CI 四环 + Releases 留存)起步 → 发布规模变大后加 Argo CD 接管发布与回滚 → 或迁移到 GitLab 获得全内置闭环。三条路线互通——准确地说,是流水线的逻辑结构可平移、语法需改写:阶段划分(lint→test→build→deploy)、作业与依赖关系、缓存与产物意识可原样带走;但配置语言并不通用(GitHub Actions 的 runs-on/steps 对 GitLab 的 stages/script,缓存从 actions/cache 改写为 GitLab 的 cache:paths/policy,触发器与保护规则各有一套),GitLab 官方即提供从 Jenkins/CircleCI 迁移的指南(GitLab Docs: Migrate to GitLab CI/CD,存在性经本次修订检索确认;直接抓取被站点防护重定向)。粗略迁移成本(经验粗估、非实测):一个典型服务的 lint/test/build 段落改写约半天到一天,主要耗在触发器、缓存与制品配置的对齐;Jenkins Groovy 管道则需重写编排逻辑,按插件依赖程度数天不等。早期选择并不锁死后期架构,但"可移植"应理解为结构可移植,而非配置文件可直接复用。

交叉洞察:两轴合起来说明了什么

洞察一:纵轴的"事故先行"规律与横轴的"重心后移"是同一枚硬币的两面。 纵轴章证明六环节是按 lint/test/build → release/rollback → 留存验证的次序逐段成熟的,越晚成熟的环节越是被事故倒逼出来的(发布事故倒逼蓝绿/金丝雀,供应链攻击倒逼 SLSA/Sigstore/attestation)。横轴章则显示,2026 年各平台在最先成熟的前三环上已经打不出差距,真正拉开选型差距的恰恰是最晚成熟的环节 4-6——GitLab 的一键回滚、GitHub 的双层留存、Argo CD 的 git revert。两轴互为印证:一个环节在纵轴上成熟得越晚,它在横轴上就越是差异点、也越是选型时的考察重点。 对用户的推论是:选型演示别看"测试跑得多快",要看"回滚怎么做、制品留多久、出身能不能验证"。

洞察二:配置代码化的终点是"策略代码化",而留存策略是今天各家最大公约数的短板。 纵轴第三章判断"配置代码化单向递增",2020-2024 年走到 retention-days 与 attestation 这一步;把它放到横轴上看,GitLab 用一行 expire_in、GitHub 用 retention-days + Releases 不计配额,而 Jenkins/Woodpecker 的留存仍是"磁盘满了就是运维事故"的脚本工程。也就是说,"策略即代码"的进度在不同平台上是不同步的,这正是横轴打分的依据所在。落地建议:无论选哪家,留存都应写成流水线定义的一部分——发布制品进 Release/Registry 长存、中间产物显式设短保留期(GitHub 90 天默认、GitLab 30 天默认只该是兜底而非默认策略),并用 attestation 把"可验证出身"纳入留存对象。

洞察三:免费经济学每隔几年重定价一次,横轴的静态比价必须配上纵轴的时间维度。 纵轴上这条线索清晰可见:2011 年托管 CI 以"开源免费"起家 → 2021 年 Travis CI 收缩免费层引发迁移潮、GitHub Actions 接盘 → 2025-12 GitHub 尝试对自托管 runner 收费($0.002/分钟)被反弹推迟、同时托管 runner 降价最多 39% → GitLab 明确自建 runner 不消耗配额、Buildkite 把算力留在用户手里。把这条时间线叠到横轴的计费表上,结论就不是"今天谁便宜",而是:平台随时可能改规则,唯一稳的杠杆是把计算负载握在自己手里(自建 runner)且选对明确豁免自建算力计费的平台。今天的"免费"是获客手段而非承诺,成本模型应按"自建 runner 是否计费"这个变量做敏感性测试,而不是按当月账单线性外推。

洞察四:AI 代理让纵轴回到起点,也让横轴的竞争焦点从"跑得快"转向"证得清"。 纵轴的起点是"机器定时替人跑构建",2024 年后 AI 代理进一步替人写代码、开 PR(Agentic Workflows 甚至让流水线输入不再来自人类)——闭环的"守门"职能被空前放大,这解释了为什么 required checks、人工审批门、凭据隔离成为 2025-2026 年的讨论中心(StepSecurity 的风险分析)。放到横轴上,这意味着平台的下半场竞争指标变了:Marketplace 数量、构建分钟单价这些"上半场指标"让位给"门禁能否强制(分支保护 + required checks)、发布能否审批(Environments)、制品能否自证(attestations)、代理凭据能否隔离"。选型时应把这些下半场指标放进评估清单——它们恰好都是六环节闭环里"rollback 与留存验证"环节的现代化身。

对用户的判断与建议(综合两轴后的行动清单):

  1. 默认路径:代码已在 GitHub 的小团队,直接用 GitHub Actions 起步——lint/test/build 免费,发布制品进 Releases(不计配额、无上限)长存,中间产物显式设 retention-days 短留;回滚先用约定做法:re-deploy 旧 tag/commit(注意 re-run 旧 run 只是重放同一次 run,严格说不是回滚,见维度一)。
  2. 规模化路径:发布规模变大或上了 K8s 后,加 Argo CD 接管 release/rollback 两环(git revert 即回滚,Git 历史即审计日志),CI 侧不必动——这是 2026 年最普遍的分工范式,也符合"分层实现闭环"的横向判断。
  3. 一体化路径:需要私有化部署、跨阶段审计一体化的团队选 GitLab——六环节原生度最高(一键回滚按钮 + 内置双 registry + expire_in),自建 runner 不消耗配额使规模化成本可控;但注意 GitLab 制品默认只留 30 天,长存对象要显式进 Registry。
  4. 三条红线:① 留存策略必须写进流水线定义(双层留存:发布制品长存、中间产物短留),不要吃平台默认值;② 成本模型显式纳入"自建 runner 是否计费"变量并每年复核(GitHub 2025-12 的收费尝试说明规则会变);③ AI 生成的代码必须走与人完全相同的分支保护、必需检查与人工评审门,并为 CI 中的代理单独隔离凭据——否则 lint/test 门禁对"产量最大的提交者"形同虚设。
  5. 不必焦虑锁定,但要为改写付费:流水线的逻辑结构可平移、语法需改写(GitHub Actions/GitLab/CircleCI 语法互不通用,主流平台提供官方迁移指南,如 GitLab Docs: Migrate to GitLab CI/CD),典型服务的 lint/test/build 段落改写约半天到一天(经验粗估、非实测)。GitHub Actions → +Argo CD → GitLab 的迁移路径互通,早期的最小闭环选择不会锁死后期的架构演进——前提是把"结构可平移"而非"配置可直接复用"作为迁移预期。

参考来源

说明:以下来源承接自两份章节报告(纵轴章与横轴章,检索日均为 2026-11-01),已去重合并;标注"当日直接抓取官方文档核实"者为横轴章核实项,综合环节未重新抓取;本次修订新增/更正的引用(npm provenance 公告、npm 官方文档、GitHub re-run 文档新路径、Buildkite 定价页、GitLab 迁移文档)已于 2026-11-01 当日实际抓取或检索核实(核实结果见文末「修订说明」)。原章节标注"未独立核验"的细节(Booch 1991 提法、《Accelerate》出版细节、Biome 时间线、SolarWinds 细节)在正文均随文保留标注;原列于其中的"npm SLSA Build L2 时间线"已由本次修订核验并更正,移出该清单。

章节来源

CI/CD 历史与理论

发布、回滚与 GitOps

lint 与 build

托管 CI 与平台现状

计费(标"当日直接抓取官方文档核实"者为横轴章 2026-11-01 核实项)

制品留存与供应链安全

AI 代理与流水线

修订说明(2026-11-01,按独立审读意见逐条修订)

初稿共收到 8 条审读意见,逐条处置如下(行号为初稿行号):

  1. 【引文失配】原 L59:npm provenance 条目重写——时间由"2023 年 5 月"更正为"2023 年 4 月公开上线"(官方公告 2023-04-19),补两条官方链接(github.blog 公告、npm 官方文档,当日 curl 抓取均 200);原误引的 SLSA 发布 HN 讨论(2021-06)仅保留在 2021 年 SLSA 发布处,不再为 2023 年论断背书。GA 时间点(2023-09)出自检索摘要,对应 changelog 链接抓取 404 未列出,已随文注明。
  2. 【自相矛盾】原 L4 vs L162/L171/L176:卷首改为"绝大多数原始来源链接已保留",不再声称"全部保留";Buildkite 定价页补真实链接(当日抓取 200,页面口径与正文不一致处已在参考条目注明);其余 4 条无链接条目(Medium GitOps、Drone vs Woodpecker、Top 5 CI/CD 2026、Dagger/Tekton 对比)逐条注明"仅检索摘要"及补链尝试结果。
  3. 【范围承诺未兑现】原 L90/总表:对比框架句明确 Drone CI、Tekton、Argo Workflows "仅作背景提及、不入总对比表"(下表覆盖其余十一个对象);"混合型"注释从类目尾部移到 Buildkite 名下。
  4. 【承重论断无支撑】原 L125/L143:"lint/test/build 的 YAML 高度可移植"降级为"流水线逻辑结构可平移、语法需改写",补 GitLab 官方迁移文档为佐证(检索确认存在;直接抓取被站点防护 403 拦截),并给出粗略改写成本(典型服务 lint/test/build 半天到一天;Jenkins Groovy 数天;均标注为经验粗估、非实测)。行动清单第 5 条同步改写。
  5. 【回滚叙述薄弱】原 L110(含 L96 总表、L118、L139 联动):补 GitHub 官方 re-run 文档(新路径,当日抓取 200),讲清 re-run=重放同一次 run(同一 commit、沿用原 workflow 版本、受保留期限制)≠ 回滚;re-deploy 旧 tag/commit 才是回滚及其风险(审批门重走、制品须仍在保留期内可复现);re-deploy 约定标注"社区惯用,惯例普遍程度未独立核验";小结补"并列第一梯队"判据一句话(六环节能否原生/低胶水闭合 vs 是否每环有原生按钮);总表 GitHub Actions 行、维度五、行动 1 的表述同步修正。
  6. 【TL;DR 冲突】原 L8:改为"中间产物显式设短保留期(平台 90/30 天默认只作兜底,而非默认策略)",与洞察二、红线①一致。
  7. 【数据无出处】原 L116:删除无来源链接、口径不明的"GitHub Actions ~85% vs Jenkins 59%→54%"数字,保留定性判断并在正文注明删除原因。
  8. 【阶段与"六波"对应不齐】原 L14(及 L20/L26/L31/L52 涉及处):在"口径先行"节补两点口径说明——六波与六阶段为近似对应(供应链与制品签名横跨阶段四/五,制品仓库潮内嵌于阶段二叙述)、四处标志性事件按主题归段(Fowler 2006-09 入阶段一、Hudson 2005 与 State of DevOps 2014 入阶段二、Vercel 收购 2022-04 入阶段四);对应正文位置各加一处"见上文口径说明"指引,正文其余内容未删改。

本次修订实际核实的链接与结果:https://github.blog/2023-04-19-introducing-npm-package-provenance/(curl 200);https://docs.npmjs.com/generating-provenance-statements(curl 200);https://docs.github.com/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/re-running-workflows-and-jobs(curl 200;旧路径 /using-workflows/re-running-workflows-and-jobs 已 404);https://buildkite.com/pricing(curl 200);https://docs.gitlab.com/ci/migrations/(curl 403,被站点防护重定向至 sign_in,存在性经 WebSearch 检索确认);npm provenance GA changelog(github.blog/changelog/2023-09-29-...,curl 404,未采用)。初稿 4 条无链接条目经检索可命中主题,但仅返回搜索跳转 URL,无法提供可点开原始链接。


*综合报告最终稿,撰写于 2026-11-01,按独立审读意见(8 条)修订。由纵轴章与横轴章综合而成;初稿保留于 drafts/ 目录作为修订输入,本稿为最终交付版本。*

思考题(读完后想一想,参考答案可展开)

  1. 报告认为 CI/CD“最小闭环”不是被一次性设计出来的。请概括这一核心论点:“最小闭环”包含哪六个环节?“闭合”的关键判据是什么?它在 2001–2024 年间由哪六波力量逐段补齐?
    参考答案

    报告论点:CI/CD 最小闭环并非一次设计,而是由六波力量逐段补齐——自动构建、交付与回滚理论、容器与流水线即代码、平台内置 CI/CD、SLSA/Sigstore 制品签名、AI 代理进流水线守门。最小闭环指 lint→test→build→发布→回滚→制品留存六环节;关键判据不是哪家跑测试更快,而是六环节能否在同一平台内以原生能力或一条可审计的链路闭合,无需拼接大量外部系统。

  2. 2026 年横向对比中,报告为何判断 lint/test/build 已同质化、选型差异集中在发布/回滚/留存?GitHub Actions 与 GitLab CI 并列“六环节覆盖第一梯队”的判据是什么?两者在回滚环节上的取舍差异何在?
    参考答案

    前三环(lint/test/build)在主流平台已同质化,打不出差距,选型差异集中在发布、回滚、留存三环——报告的洞察是:一个环节在纵轴上成熟得越晚,在横轴上就越是差异点。“并列第一梯队”的判据是六环节能否在平台内以原生或低胶水成本闭合,而非每环都有原生按钮:GitLab 六环全原生、回滚有一键按钮;GitHub 六环亦可原生达成,但回滚无专门按钮,需按约定 re-deploy 旧 tag。

  3. 报告为什么说托管 CI 的“免费午餐”正在被重新定价?请以 GitHub Actions 定价风波为例说明,并写出报告要求成本模型显式纳入的变量与三条“红线”。
    参考答案

    GitHub 2025-12 宣布自 2026-03-01 起对自托管 runner 收 $0.002/分钟,反弹后推迟,同时托管 runner 降价最多 39%——今天的“免费”是获客手段而非承诺,成本模型应按“自建 runner 是否计费”做敏感性测试。三条红线:留存策略写进流水线定义(发布制品长存、中间产物短留);成本模型纳入该变量并每年复核;AI 生成代码走与人相同的门禁并隔离凭据。

  4. 对代码已在 GitHub 的个人开发者/小团队,报告推荐的“默认路径”是什么?为什么 re-run 旧 workflow run 严格说不算回滚?规模变大或上了 K8s 后报告建议如何演进?
    参考答案

    默认路径:用 GitHub Actions 起步,lint/test/build 免费,发布制品进 Releases 长存、中间产物显式设 retention-days 短留。回滚按约定 re-deploy 旧 tag;re-run 只是重放同一次 run,送不回旧版本,严格说不是回滚。上 K8s 后加 Argo CD 接管发布与回滚——git revert 即回滚、Git 历史即审计日志。

← 资料库今日播报 →