Ucacher:通过系统调用工具加速 GitHub Actions

主要观点:传统 CI/CD 工作流中手动配置缓存和跳过技术存在不足,本文介绍了当前在 GitHub Actions 中实现缓存和跳过的标准方法,包括使用actions/cache动作缓存文件和通过if关键字在 GitHub Actions 中进行条件式跳过,还探讨了其局限性,如在矩阵策略下的缓存失效问题,随后引出 Ucacher 工具,它能理解命令的输入和输出,以推断是否受源文件更改影响并相应地跳过执行,通过在 Facebook/react 仓库的测试,Ucacher 能显著减少总 CI 时间约 2 倍,提高精度,减少冗余步骤,节省时间和计算成本,且能无缝集成到 GitHub Actions 中。
关键信息

  • GitHub Actions 中传统缓存和跳过方法及其局限性。
  • Ucacher 的工作原理,通过监控文件相关系统调用、计算文件哈希等实现精确缓存和跳过。
  • 在 Facebook/react 仓库的测试结果,包括缓存未命中和命中时的运行时间对比,以及对不同文件更改的精确处理。
    重要细节
  • 缓存时使用actions/cache动作,通过pathkey参数指定要缓存的目录和缓存的唯一标识。
  • 跳过通过在 GitHub Actions 中使用if关键字基于条件控制作业或步骤的执行。
  • Ucacher 利用ptrace监控文件系统调用,在缓存命中时跳过命令执行并恢复缓存输出文件。
  • 测试中 Ucacher 在缓存未命中时有约 10%的额外开销,缓存命中时未受影响的分片只需约 40s,受影响的分片约 1m40s。
  • 对不同文件更改的测试,如修改源文件时只有部分作业重新运行,修改非构建范围文件时所有作业不重新运行。
阅读 7
0 条评论