每次提交等 14 分钟,团队一天按二十次算,平白烧掉近五个小时。这件事的 ROI 高得离谱,我们花了一周解决它。
时间都去哪了
先把流水线每一段的耗时打出来,结果很直白:依赖安装 6 分 20 秒,测试 5 分 10 秒,其余零散。
三板斧
- 依赖缓存 —— 按 lockfile 哈希做 key,命中率 92%,安装从 6 分 20 秒降到 40 秒;
- 测试并行 —— 按历史耗时把测试切成四份,最慢的那份决定总时长,从 5 分 10 秒降到 1 分 50 秒;
- 依赖治理 —— 清掉 37 个没人用的包,镜像体积也小了一圈。
- name: Restore dependencies
uses: actions/cache@v4
with:
path: ~/.npm
key: npm-${{ hashFiles('**/package-lock.json') }}
restore-keys: npm-
别忘了这一步
优化完一定要把耗时做成图表持续看。缓存命中率会随依赖变动慢慢下降,三个月后我们又做了一次清理——这是个长期活,不是一次性的。