Google Cloud Build - 如何缓存 Bazel?

flo*_*olu 3 caching google-cloud-platform bazel google-cloud-build

我最近开始将 Cloud Build 与 Bazel 结合使用。所以我有一个基本的cloudbuild.yaml

steps:
  - id: 'run unit tests'
    name: gcr.io/cloud-builders/bazel
    args: ['test', '//...']
Run Code Online (Sandbox Code Playgroud)

它运行我的 Bazel 项目的所有测试。

但是正如您从这个屏幕截图中看到的,每个构建大约需要 4 分钟,尽管我没有触及任何会影响我的测试的代码。

构建持续时间

首次在本地运行测试大约需要 1 分钟。但是第二次运行测试,在 Bazels 缓存的帮助下,只需要几秒钟。

所以我的目标是在 Google Cloud Build 中使用 Bazel 缓存

更新

正如Thierry Falvo所建议的那样,我研究了这些建议。因此,我尝试将以下内容添加到我的cloudbuild.yaml:

steps:
  - name: gcr.io/cloud-builders/gsutil
    args: ['cp', 'gs://cents-ideas-build-cache/bazel-bin', 'bazel-bin']

  - id: 'run unit tests'
    name: gcr.io/cloud-builders/bazel
    args: ['test', '//...']

  - name: gcr.io/cloud-builders/gsutil
    args: ['cp', 'bazel-bin', 'gs://cents-ideas-build-cache/bazel-bin']
Run Code Online (Sandbox Code Playgroud)

虽然我创建了存储桶和文件夹,但我收到此错误:

CommandException: No URLs matched
Run Code Online (Sandbox Code Playgroud)

云构建错误

use*_*975 5

我认为与其缓存离散结果(工件),不如将 GCS(云存储)用作bazel 远程缓存

- name: gcr.io/cloud-builders/bazel
  args: ['test', '--remote_cache=https://storage.googleapis.com/<bucketname>', '--google_default_credentials', '--test_output=errors', '//...']
Run Code Online (Sandbox Code Playgroud)

  • 它成功了,测试在 0.7 秒内完成。但测试开始前的设置工作花了 4 分钟:o。这是正常的吗?我能做点什么吗? (2认同)
  • 我得到了类似的结果 - 性能收益很小。有时我还会遇到一致性问题,需要清除缓存/存储桶,因此我暂时将其在构建中关闭。 (2认同)