测试翻四倍,等 CI 的时间反而变短
Linear 把 PR 等待从 6 分钟压到 5 分钟出头,同时把每个测试的机器时间砍半。六步顺序可以直接搬,附他们试错失败的缓存方案。
代码写得越来越快,验证没变快,结果就是每个 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 规模的设计委托跑完,看清新版的记忆、巡检和定时任务各自解决什么,以及积分上限这类必须提前设的闸门,和三个容易踩空的地方。- 先换机器,别先改流水线。同样的配置做前后两天的对比,能拿到干净的基线。Linear 这一步就拿到了 34%。
- 换掉最慢的那个检查工具。他们换编译器,单项降 73%,瓶颈直接换位置。找最慢的一项,别平均用力。
- 砍关键路径上的门禁。能浅拉取就浅拉取,能不拉就不拉,能并行就别串行。这些任务本身只跑几秒,但挡在所有人前面。
- 把重复安装挪进镜像,把全量安装改成按包安装。注意:缓存不一定更快。Linear 实测恢复依赖缓存要 28 秒,直接重装只要 7.5 秒。
- 合并短任务。七个各起一次 runner 的检查,合成两个任务并行,省的是固定开销,不是计算量。
- 最后再分片。分片数翻倍,准备成本也翻倍。准备时间没降下来之前,加片只会更贵。
- 动隔离这类高风险优化时,用逐文件显式声明,保留退出机制,并把规则同步给会生成测试的 agent。
四、三个别信的说法
"分片越多,CI 越快。" 只有在每个分片的固定成本足够低时成立。Linear 算过:准备时间 110 到 140 秒时,八个分片光准备就要 15 到 19 分钟,比测试本身还长。
"缓存总比重新装快。" 他们的依赖缓存命中后恢复要 28 秒,而过滤后的安装只要 7.5 秒。缓存还带来保存时间和不稳定性。要测,不要假设。
"加机器就能解决。" 机器更快确实有效,但瓶颈会立刻转移到门禁任务和准备阶段。Linear 的顺序是先换机器,再逐层往下拆。
五、一句话结论
CI 提速不是把测试跑得更快,是把所有"还没开始跑测试"的时间先砍掉。
信息来源
功能与价格以官方公告为准。本文写于 2026 年 10 月 19 日。
每周一封,只发新教程和可复制模板。不发广告,随时退订。