如何在GitHub Actions中维护Bazel构建缓存?
在GitHub Actions中复用Bazel构建缓存的方法
Bazel默认将所有构建产物和中间步骤缓存存放在~/.cache/bazel目录下,你可以借助GitHub官方的缓存Action实现跨工作流运行的缓存复用,具体操作方法如下:
核心实现步骤
- 构建任务执行前,先恢复之前保存的Bazel缓存
- 执行正常的Bazel构建命令,Bazel会自动识别已有缓存,跳过已完成的构建步骤
- 构建完成后,将本次新增的缓存内容上传保存,供后续工作流运行使用
完整工作流配置示例
name: Bazel 构建工作流 on: [push, pull_request] jobs: build: runs-on: ubuntu-latest steps: - name: 拉取代码 uses: actions/checkout@v4 - name: 恢复Bazel构建缓存 uses: actions/cache@v4 with: path: ~/.cache/bazel # 缓存键配置:包含操作系统、依赖配置、构建配置的哈希值,配置无变化即可完全命中缓存 key: ${{ runner.os }}-bazel-${{ hashFiles('WORKSPACE', '**/*.bzl', '**/BUILD.bazel') }} # 完全匹配不到缓存时,回退到同操作系统下的最新Bazel缓存做增量更新 restore-keys: | ${{ runner.os }}-bazel- - name: 执行Bazel构建 run: bazel build //...
配置说明
- 不需要额外缓存工作区下的
bazel-*软链接目录,所有实际缓存内容都已存放在~/.cache/bazel中,重复缓存只会浪费存储空间 - 缓存键的哈希匹配规则可以根据你的项目灵活调整,比如你有自定义的依赖配置文件,也可以加入
hashFiles的匹配列表 - 配置回退规则后,即使构建配置有修改,也可以基于旧缓存做增量更新,无需从零开始构建
注意事项
- 如果你有构建前清理的步骤,请放在缓存恢复步骤之后执行,避免误删已恢复的缓存
- Bazel版本更新后缓存会自动失效,新版Bazel会使用不同的缓存目录结构,不需要额外修改缓存键配置
内容的提问来源于stack exchange,提问作者sdgfsdh
相关产品推荐
相关产品推荐

