文章 · 工程化

把 CI 从 12 分钟压到 4 分钟

流水线从 12 分钟压到 4 分钟,一行业务代码都没改。真正吃掉时间的是三件事:任务串行、缓存命中率低、产物太胖。

先把时间花在哪搞清楚

流水线跑起来的第一件事不是优化,是装个时间线。把每个 step 的耗时打出来,通常会发现一半以上的时间耗在两三个 step 上,其余都是几十秒的零头。

并行分片

单测和构建之间没有依赖,却常常排在一条线上。拆成两个 job 并行跑,再把单测按文件分片,十二分钟的串行一下子砍到四分钟出头。

缓存要命中才有意义

  • 缓存 key 里带上 lockfile 的哈希,依赖没变就不重装
  • 构建产物的缓存按源码目录分片,改一个包别让整仓重编
  • 别把缓存放在流水线结束才上传,边跑边传命中率更高

产物裁剪

sourcemap、测试报告、冗余的语言包,很多是给调试用的,构建时按环境开关掉。产物小一圈,上传和部署两个阶段都会跟着快。

评论14

访客

登录后参与评论,你的发言会署上自己的名字。

  • 周迟

    周迟作者@zhouchi2026-10-08

    放在最前面:看到都会回,先谢过各位补充的经验。

  • 邓可

    邓可@dengke2026-10-09

    把流水线耗时先打出来这一步太重要了,不然优化全靠猜。

  • 罗叙

    罗叙@luoxu2026-10-10

    同意,先有数据再谈优化,不然改了半天不知道有没有用。

  • 罗叙

    罗叙@luoxu2026-10-10

    并行分片我们试过,收益确实明显,但要注意任务之间的隐式依赖。

  • 白露

    白露@bailu2026-10-11

    同感,我们是先画了一遍依赖图才敢拆的。

  • 江辰

    江辰@jiangchen2026-10-11

    缓存那部分能不能再展开讲讲?我们这边命中率一直上不去。

  • 唐棠

    唐棠@tangtang2026-10-12

    产物裁剪这条被低估了,sourcemap 和语言包占的空间比想象中大。