每次提交等 14 分钟,团队一天按二十次算,平白烧掉近五个小时。这件事的 ROI 高得离谱,我们花了一周解决它。

时间都去哪了

先把流水线每一段的耗时打出来,结果很直白:依赖安装 6 分 20 秒,测试 5 分 10 秒,其余零散。

三板斧

  1. 依赖缓存 —— 按 lockfile 哈希做 key,命中率 92%,安装从 6 分 20 秒降到 40 秒;
  2. 测试并行 —— 按历史耗时把测试切成四份,最慢的那份决定总时长,从 5 分 10 秒降到 1 分 50 秒;
  3. 依赖治理 —— 清掉 37 个没人用的包,镜像体积也小了一圈。
- name: Restore dependencies
  uses: actions/cache@v4
  with:
    path: ~/.npm
    key: npm-${{ hashFiles('**/package-lock.json') }}
    restore-keys: npm-

别忘了这一步

优化完一定要把耗时做成图表持续看。缓存命中率会随依赖变动慢慢下降,三个月后我们又做了一次清理——这是个长期活,不是一次性的。