文章 · 工程化
把 CI 从 12 分钟压到 4 分钟
流水线从 12 分钟压到 4 分钟,一行业务代码都没改。真正吃掉时间的是三件事:任务串行、缓存命中率低、产物太胖。
先把时间花在哪搞清楚
流水线跑起来的第一件事不是优化,是装个时间线。把每个 step 的耗时打出来,通常会发现一半以上的时间耗在两三个 step 上,其余都是几十秒的零头。
并行分片
单测和构建之间没有依赖,却常常排在一条线上。拆成两个 job 并行跑,再把单测按文件分片,十二分钟的串行一下子砍到四分钟出头。
缓存要命中才有意义
- 缓存 key 里带上 lockfile 的哈希,依赖没变就不重装
- 构建产物的缓存按源码目录分片,改一个包别让整仓重编
- 别把缓存放在流水线结束才上传,边跑边传命中率更高
产物裁剪
sourcemap、测试报告、冗余的语言包,很多是给调试用的,构建时按环境开关掉。产物小一圈,上传和部署两个阶段都会跟着快。
评论14
登录后参与评论,你的发言会署上自己的名字。
周迟作者@zhouchi·2026-10-08
放在最前面:看到都会回,先谢过各位补充的经验。
邓可@dengke·2026-10-09
把流水线耗时先打出来这一步太重要了,不然优化全靠猜。
罗叙@luoxu·2026-10-10
同意,先有数据再谈优化,不然改了半天不知道有没有用。
罗叙@luoxu·2026-10-10
并行分片我们试过,收益确实明显,但要注意任务之间的隐式依赖。
白露@bailu·2026-10-11
同感,我们是先画了一遍依赖图才敢拆的。
江辰@jiangchen·2026-10-11
缓存那部分能不能再展开讲讲?我们这边命中率一直上不去。
唐棠@tangtang·2026-10-12
产物裁剪这条被低估了,sourcemap 和语言包占的空间比想象中大。