AI Pulse
📡 X 信号

项目管理工具Linear优化GitHub Actions CI的15项实用优化措施

这是Linear针对GitHub Actions的持续集成(CI)优化方案,一共包含15项具体调整,最终实现了CI速度的大幅提升。

第一项:更换更快的运行器。Linear将CI从GitHub官方运行器迁移到性能更强的机器上,所有任务平均速度提升34%,类型检查速度提升52%。

第二项:使用原生类型检查。从TypeScript编译器tsc切换到原生编译器tsgo后,类型检查每周中位耗时降低73%,并将其剔出了关键执行路径。

第三项:无需类型信息的代码检查。把需要类型信息的检查规则重写为仅基于语法的规则后,API代码检查速度提升68%,全仓库检查速度提升55%,且内存占用大幅降低。

第四项:使用Oxlint。仅语法规则的调整让迁移到Oxlint变得轻松,进一步缩短了代码检查消耗的运行器时间。

第五项:轻量化代码检出。使用浅克隆后,最慢的 gate 任务耗时从94秒降到20秒;从不读取文件的任务中移除代码检出步骤后,耗时从27秒降到7秒。

第六项:高容错代码检出。给检出流程增加重试机制,并让停滞的拉取在约30秒后中止,避免进程挂起,大幅减少了卡在等待git的运行次数。

第七项:移出关键路径。把缓存写入操作从最终合并检查中移出,每个API拉取请求和合并队列条目都能节省42秒。

第八项:在CI镜像中提前完成安装。把Postgres客户端预打包进基础镜像,每次运行的每个测试分片都能节省7到8秒,还解决了安装步骤偶尔挂起的问题。

第九项:过滤安装范围。仅安装API包而非整个 monorepo(多包仓库),把pnpm安装耗时从44到73秒缩短到16到18秒。

第十项:移除低效缓存。node_modules缓存恢复需要约28秒,比全新安装的7.5秒更慢,因此Linear直接移除了该缓存。结合第八、第九项调整,每个分片的初始化耗时降低了44%。

第十一项:使用模式快照。加载模式快照而非重放所有迁移步骤,把每个容器的数据库初始化耗时从约12秒缩短到1到2秒。

第十二项:批量短任务检查。把7个小型任务合并为两个并行执行的任务,每月节省约87000分钟运行器时间,占总CI耗时的11.8%。

第十三项:均衡分片负载。拆分过大的测试文件,并把分片数量从4个增加到8个,关键任务速度提升19%,成本降低19%。

第十四项:共享模块初始化状态。允许测试文件共享初始化步骤,是本次优化收益最大的调整。最慢分片耗时从300到379秒降到约195秒,每次运行的总分片运行时间从32.8分钟降到22分钟。

第十五项:带初始化耗时限制的分片。在初始化耗时降到约40秒后,8个分片的总初始化耗时比原来4个分片更少,同时测试并行度提升了一倍。

很多公司都会犯一个错误:只更换运行器,就指望解决CI的瓶颈问题。更换更快运行器只是15项调整中的第一项,它只是优化的基础,真正的优化需要针对实际测试和工作流程调整。

如果想要让你的CI实现这些优化,加上另外50余项调整,可以让你的智能体参考这篇帖子。原文特别感谢@moofeez,认为这项优化对Linear的产品交付效率有巨大帮助。

查看 X 原帖

订阅 AI Pulse

每天 08:00 · 12:30 · 18:30 · 23:50 更新