远程缓存设置
本页介绍远程缓存设置。有关缓存系统的一般说明,请参阅缓存。
gRPC 远程缓存
虽然未来可能有多种远程缓存存储实现,sbt 2.0 已内置与 Bazel 远程缓存后端兼容的 gRPC 客户端。要配置 sbt 2.x,请将以下内容添加到 project/plugins.sbt:
addRemoteCachePlugin
Bazel 远程缓存后端众多,既有开源也有商业方案。虽然本页并非所有 Bazel 远程缓存实现的完整列表,但希望能展示如何为多种后端配置 sbt 2.x。
认证
gRPC 认证有多种方式,Bazel 远程缓存后端使用其中不同种类:
- 无认证。适用于测试。
- 默认 TLS/SSL。
- 使用自定义服务器证书的 TLS/SSL。
- 使用自定义服务器和客户端证书的 TLS/SSL,即 mTLS。
- 带 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。
- 在 https://app.buildbuddy.io/ 中,进入 Settings,将 Organization URL 改为
<something>.buildbuddy.io。 - 接下来,进入 Quickstart 并记录 URL 和
--remote_headers。 - 创建名为
$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
NativeLink 是用 Rust 实现的开源 Bazel 远程执行后端,注重性能。截至 2024 年 6 月,NativeLink Cloud 处于测试阶段。
- 在 https://app.nativelink.com/ 中,进入 Quickstart 并记录 URL 和
--remote_header。 - 创建名为
$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