主要观点:传统 CI/CD 工作流中手动配置缓存和跳过技术存在不足,本文介绍了当前在 GitHub Actions 中实现缓存和跳过的标准方法,包括使用actions/cache
动作缓存文件和通过if
关键字在 GitHub Actions 中进行条件式跳过,还探讨了其局限性,如在矩阵策略下的缓存失效问题,随后引出 Ucacher 工具,它能理解命令的输入和输出,以推断是否受源文件更改影响并相应地跳过执行,通过在 Facebook/react 仓库的测试,Ucacher 能显著减少总 CI 时间约 2 倍,提高精度,减少冗余步骤,节省时间和计算成本,且能无缝集成到 GitHub Actions 中。
关键信息:
- GitHub Actions 中传统缓存和跳过方法及其局限性。
- Ucacher 的工作原理,通过监控文件相关系统调用、计算文件哈希等实现精确缓存和跳过。
- 在 Facebook/react 仓库的测试结果,包括缓存未命中和命中时的运行时间对比,以及对不同文件更改的精确处理。
重要细节: - 缓存时使用
actions/cache
动作,通过path
和key
参数指定要缓存的目录和缓存的唯一标识。 - 跳过通过在 GitHub Actions 中使用
if
关键字基于条件控制作业或步骤的执行。 - Ucacher 利用
ptrace
监控文件系统调用,在缓存命中时跳过命令执行并恢复缓存输出文件。 - 测试中 Ucacher 在缓存未命中时有约 10%的额外开销,缓存命中时未受影响的分片只需约 40s,受影响的分片约 1m40s。
- 对不同文件更改的测试,如修改源文件时只有部分作业重新运行,修改非构建范围文件时所有作业不重新运行。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。