AI百科网 AI教程
场景实战

测试翻四倍,等 CI 的时间反而变短

Linear 把 PR 等待从 6 分钟压到 5 分钟出头,同时把每个测试的机器时间砍半。六步顺序可以直接搬,附他们试错失败的缓存方案。

本文目录 · 6 节

代码写得越来越快,验证没变快,结果就是每个 PR 都在 CI 门口排队。Linear 的 CTO 给这件事起了个标题:CI 成本太高。然后把它派给了工程团队。

一、发生了什么

9 月 21 日,Linear 在自家工程博客复盘了这次改造,作者是 Mufeez Amjad。这是公司自己的口径,不是第三方测评,但数字给得很细。

背景是:今年年初以来,他们的测试套件规模几乎翻了两番。Agent 让提交代码变快,但每个 PR 仍要过 CI,于是 CI 成了瓶颈,基础设施成本上升,开发者和 agent 都在等反馈。

结果有两个:PR 在 CI 上的等待时间从超过 6 分钟降到略高于 5 分钟;每个测试消耗的 runner 时间大约减半。

他们说自己做了四类改动。第一类是换基础设施和工具链。把负载从 GitHub 自带的 runner 迁到第三方 runner,同样的流水线,任务平均快 34%,类型检查这类负载快了 52%。换成原生的 TypeScript 编译器后,类型检查的周中位数耗时降了 73%,瓶颈直接从类型检查上移开。

第二类是优化"门禁"任务。每次运行前都要判断改了哪些路径、同样的输入是否已经测过。这些小任务挡在所有分片前面,慢一秒就放大一遍。他们把拉取深度限制住,最慢的门禁从 94 秒降到 20 秒;完全不需要工作区的任务直接不拉代码,从 27 秒降到 7 秒。变更检测任务的中位耗时从 26 秒降到 8 秒,最慢一次从 138 秒降到 37 秒。

第三类是消除重复的准备。API 测试分片每次都要装同一个数据库客户端,改成预装进镜像。整个工作区全量安装改成只装 API 包,安装时间从 44 到 73 秒降到 16 到 18 秒。每个分片的准备时间从 110 到 140 秒降到 67 到 73 秒,约降 44%。数据库迁移每次重放改成加载快照,从约 12 秒降到 1 到 2 秒。七个各自启动 runner 的小检查合并成两个任务并行跑,按六月的用量,每月省下约 8.7 万 runner 分钟,相当于总用量的 11.8%。

第四类才是测试执行本身。他们把过大的测试文件拆小,分片从四个加到八个,关键任务快 19%、便宜 19%,最慢分片从 5.25 分钟降到 4.33 分钟。最大的一步是允许部分测试共享模块状态,最慢分片从 300 多秒降到约 195 秒,API 分片总机器时间从 32.8 分钟降到 22 分钟。这一步风险也最高,他们用逐文件显式声明的方式控制范围。

文末有一句值得记住:如果不做这些改造,今天的测试套件大约要跑 11 分钟,接近现在的两倍。而他们每周还在新增约 2000 个测试。

二、跟你有什么关系

CI 排队越来越久的团队。 先量两个数:PR 等待时间、每个测试的机器时间。只盯其中一个,会做出错误决策。

正在大量用 agent 写代码的团队。 提交量上去以后,CI 是第一个撑不住的环节,比代码评审更早。

负责成本的人。 分片能缩短等待,但会增加机器时间。这两个指标要一起看。

三、怎么用

读到这儿,可以顺路看 Lovart 2.0 实测:设计 AI 开始接长任务 把一次双 11 规模的设计委托跑完,看清新版的记忆、巡检和定时任务各自解决什么,以及积分上限这类必须提前设的闸门,和三个容易踩空的地方。
  1. 先换机器,别先改流水线。同样的配置做前后两天的对比,能拿到干净的基线。Linear 这一步就拿到了 34%。
  2. 换掉最慢的那个检查工具。他们换编译器,单项降 73%,瓶颈直接换位置。找最慢的一项,别平均用力。
  3. 砍关键路径上的门禁。能浅拉取就浅拉取,能不拉就不拉,能并行就别串行。这些任务本身只跑几秒,但挡在所有人前面。
  4. 把重复安装挪进镜像,把全量安装改成按包安装。注意:缓存不一定更快。Linear 实测恢复依赖缓存要 28 秒,直接重装只要 7.5 秒。
  5. 合并短任务。七个各起一次 runner 的检查,合成两个任务并行,省的是固定开销,不是计算量。
  6. 最后再分片。分片数翻倍,准备成本也翻倍。准备时间没降下来之前,加片只会更贵。
  7. 动隔离这类高风险优化时,用逐文件显式声明,保留退出机制,并把规则同步给会生成测试的 agent。

四、三个别信的说法

"分片越多,CI 越快。" 只有在每个分片的固定成本足够低时成立。Linear 算过:准备时间 110 到 140 秒时,八个分片光准备就要 15 到 19 分钟,比测试本身还长。

"缓存总比重新装快。" 他们的依赖缓存命中后恢复要 28 秒,而过滤后的安装只要 7.5 秒。缓存还带来保存时间和不稳定性。要测,不要假设。

"加机器就能解决。" 机器更快确实有效,但瓶颈会立刻转移到门禁任务和准备阶段。Linear 的顺序是先换机器,再逐层往下拆。

五、一句话结论

CI 提速不是把测试跑得更快,是把所有"还没开始跑测试"的时间先砍掉。

信息来源

功能与价格以官方公告为准。本文写于 2026 年 10 月 19 日。

下一站 · 产业观察 Uber 的 AI 账本:先修路,再跑 agent Uber 一位杰出工程师拆开公司内部 AI 设施:统一模型网关、可切换的编码工具、按人计的成本分级,以及被 agent 压垮的 CI。
下一篇,直接发你邮箱

每周一封,只发新教程和可复制模板。不发广告,随时退订。

复制规范引用格式,便于转载注明出处
这篇有用吗?