Vercel CI 跳过了大半任务,网友盯着那个绿勾不放
Vercel 把 Turborepo 做成了 CI 的底座,只跑受影响的 task,内部仓库从 push 到通过快了 2 到 6 倍。但跳过这个动作,让评论区想起了一个老问题:缓存命中错了,那个绿勾算谁的。
Vercel 发了 CI,Beta,所有套餐可用。
一句话版本:拿 Turborepo 当底座,只跑被这次改动影响到的 task,其余的从缓存直接出结果。按 Vercel 自己的说法,内部仓库从 push 到显示“CI passed”快了 2 到 6 倍。
配置少得有点不像 CI。在 turbo.json 里给想跑的 task 打个标签就行:
{
"tasks": {
"lint": {
"tags": ["ci"]
}
}
}
没有 workflow YAML 要维护,也不存在 CI 配置和 turbo.json 各说各话的问题。Remote Cache 默认开着。没用 Turborepo 的仓库也能上,单包仓库同样支持,装个 turbo 写个 turbo.json 就完事。
执行层面,每个 task 单独一台机器,跑在 Vercel 的计算层 Hive 上,依赖一完成就起。Vercel 说 Beta 阶段加内部仓库已经跑完近 800 万个 task。

Jared Palmer 在推上翻了旧账。这是 2021 年他做 Turborepo 时的原始设想:本地和云上跑同一套构建,贴合代码库本身,配置尽可能少。他当时就觉得传统 YAML CI 不合理,现在更觉得。当年推不动的原因也很具体,把散落在 bash 里的活搬进依赖图、变成正经 package,太痛苦。这件事现在交给 agent 变得很轻松。
这个产品主要服务的用户是 agent
Coding agent 每天开的 PR 数量已经超过人类能审的速度,每个 PR 都卡在 CI 上等。传统 CI 不管你改了一行还是三百行,整套流程走一遍。agent 推得越多,浪费的等待越多。所以 Vercel CI 的卖点很直白:把没人碰过的 task 剔出去。
CLI 和 MCP 也是照 agent 的用法做的。vc ci ls 列运行,vc ci inspect 看一次运行里的 task,vc ci logs 拉日志,vc ci grep 跨运行搜一个字符串,比如查某个测试是不是已经 flaky 了一整周。也可以在仓库里直接让 agent 跑 npx skills use vercel/ci@setup 自己配好并开 PR。PR 上照旧挂 GitHub check,branch protection 规则不用改。
跳过这件事,评论区没打算放过
Jeff Bruchado 说,跳过是很好,直到一次错误的缓存命中,把一个没人挣来的绿勾递到 agent 手上。
auuutoo 说得更具体:turbo 只认你声明过的 inputs。某个 task 读了一个没列进依赖的文件,或者读了个环境变量,改动的时候它不会被触发,该跑的时候被跳过了。
这两个担心不算刁钻。整个模型建立在“你声明了 task 的输入”这个前提上。声明的边界画错,缓存就比不缓存更危险。
Harjot Rana 做了张图,把气氛总结完了:pipeline 跑到 Tests 那一步,状态是 skipped,备注写着“agent says they pass”,底下一行小字 satire。
Vercel 说 GA 之前还要加更细的测试选择、更强的可观测性,以及一个能在 push 之前分布式跑 task 的 vc ci 命令。方向挺清楚:让 agent 自己开 PR,自己跑 CI,自己读日志,自己改。人留着 branch protection 那一栏,点 merge,或者不点。
发布时间: 2026-10-29 05:26