远程缓存设置

本页介绍远程缓存设置。有关缓存系统的一般说明,请参阅缓存

gRPC 远程缓存

虽然未来可能有多种远程缓存存储实现,sbt 2.0 已内置与 Bazel 远程缓存后端兼容的 gRPC 客户端。要配置 sbt 2.x,请将以下内容添加到 project/plugins.sbt

addRemoteCachePlugin

Bazel 远程缓存后端众多,既有开源也有商业方案。虽然本页并非所有 Bazel 远程缓存实现的完整列表,但希望能展示如何为多种后端配置 sbt 2.x。

认证

gRPC 认证有多种方式,Bazel 远程缓存后端使用其中不同种类:

  1. 无认证。适用于测试。
  2. 默认 TLS/SSL。
  3. 使用自定义服务器证书的 TLS/SSL。
  4. 使用自定义服务器和客户端证书的 TLS/SSL,即 mTLS。
  5. 带 API 令牌头的默认 TLS/SSL。

无认证的 bazel-remote

您可从 buchgr/bazel-remote 获取代码,并使用 Bazel 在笔记本上运行:

bazel run :bazel-remote  -- --max_size 5 --dir $HOME/work/bazel-remote/temp \
  --http_address localhost:8000 \
  --grpc_address localhost:2024

要配置 sbt 2.x,请将以下内容添加到 project/plugins.sbt

addRemoteCachePlugin

并将以下内容追加到 build.sbt

Global / remoteCache := Some(uri("grpc://localhost:2024"))

使用 mTLS 的 bazel-remote

在实际环境中,mTLS 可确保传输加密且双向认证。bazel-remote 可按如下方式启动:

bazel run :bazel-remote  -- --max_size 5 --dir $HOME/work/bazel-remote/temp \
  --http_address localhost:8000 \
  --grpc_address localhost:2024 \
  --tls_ca_file /tmp/sslcert/ca.crt \
  --tls_cert_file /tmp/sslcert/server.crt \
  --tls_key_file /tmp/sslcert/server.pem

在此场景下,sbt 2.x 设置如下:

Global / remoteCache := Some(uri("grpcs://localhost:2024"))
Global / remoteCacheTlsCertificate := Some(file("/tmp/sslcert/ca.crt"))
Global / remoteCacheTlsClientCertificate := Some(file("/tmp/sslcert/client.crt"))
Global / remoteCacheTlsClientKey := Some(file("/tmp/sslcert/client.pem"))

注意使用 grpcs://,而非 grpc://

EngFlow

EngFlow GmbH 是由 Bazel 团队核心成员于 2020 年创立的构建解决方案公司,为 Bazel 提供构建分析和远程执行后端,包括远程缓存。

https://my.engflow.com/ 注册试用后,页面会指导您使用 docker 启动试用集群。若按说明操作,将在端口 8080 启动远程缓存服务。试用集群的 sbt 2.x 配置如下:

Global / remoteCache := Some(uri("grpc://localhost:8080"))

BuildBuddy

BuildBuddy 由前 Google 工程师创立的构建解决方案公司,为 Bazel 提供构建分析和远程执行后端。也以 buildbuddy-io/buildbuddy 开源提供。

注册后,BuildBuddy Personal 计划允许您通过互联网使用 BuildBuddy。

  1. https://app.buildbuddy.io/ 中,进入 Settings,将 Organization URL 改为 <something>.buildbuddy.io
  2. 接下来,进入 Quickstart 并记录 URL 和 --remote_headers
  3. 创建名为 $HOME/.sbt/buildbuddy_credential.txt 的文件并填入 API 密钥:
x-buildbuddy-api-key=*******

sbt 2.x 配置如下:

Global / remoteCache := Some(uri("grpcs://something.buildbuddy.io"))
Global / remoteCacheHeaders += IO.read(BuildPaths.defaultGlobalBase / "buildbuddy_credential.txt").trim

NativeLink 是用 Rust 实现的开源 Bazel 远程执行后端,注重性能。截至 2024 年 6 月,NativeLink Cloud 处于测试阶段。

  1. https://app.nativelink.com/ 中,进入 Quickstart 并记录 URL 和 --remote_header
  2. 创建名为 $HOME/.sbt/nativelink_credential.txt 的文件并填入 API 密钥:
x-nativelink-api-key=*******

sbt 2.x 配置如下:

Global / remoteCache := Some(uri("grpcs://something.build-faster.nativelink.net"))
Global / remoteCacheHeaders += IO.read(BuildPaths.defaultGlobalBase / "nativelink_credential.txt").trim