本页内容面向 Bazel 规则代码库的所有者和维护者。本文档介绍了如何为代码库配置 Bazel 持续集成 (CI) 系统,以针对远程执行场景测试规则的兼容性。此页面上的说明适用于存储在 GitHub 代码库中的项目。
前提条件
在完成本页面上的步骤之前,请确保完成以下操作:
- 您的 GitHub 代码库属于 Bazel GitHub 组织。
- 您已按照 Bazel 持续集成中的说明为代码库配置了 Buildkite。
设置 Bazel CI 以进行测试
- 在 - .bazelci/presubmit.yml文件中,执行以下操作:- a. 添加名为 - rbe_ubuntu1604的配置。- b. 在 - rbe_ubuntu1604配置中,添加要针对远程执行进行测试的构建和测试目标。
- 将 - bazel-toolchainsGitHub 代码库添加到您的- WORKSPACE文件中,并将其固定到最新版本。另添加一个名称为- buildkite_config的- rbe_autoconfig目标。此示例为使用 BuildKite CI 进行远程执行创建了- rbe_ubuntu1604的工具链配置。
load("@bazel_toolchains//rules:rbe_repo.bzl", "rbe_autoconfig")rbe_autoconfig(name = "buildkite_config")
- 发送包含对 - presubmit.yml文件所做更改的拉取请求。(请参阅示例拉取请求。)
- 如需查看 build 结果,请点击 GitHub 中 RBE (Ubuntu 16.04) 拉取请求检查的详情,如下图所示。此链接会在拉取请求合并且 CI 测试运行后显示。(请参阅示例结果。)  
- (可选)在分支保护规则中,将 bazel test (RBE (Ubuntu 16.04)) 检查设置为合并前必须通过的测试。该设置位于 GitHub 中的设置 > 分支 > 分支保护规则,如下图所示。  
排查失败的 build 和测试
如果您的 build 或测试失败,很可能是由于以下原因:
- 默认容器中未安装必需的 build 或测试工具。 使用 - rbe_ubuntu1604配置构建时,默认在- rbe-ubuntu16-04容器内运行,该容器包含许多 Bazel 构建通用的工具。不过,如果您的规则需要默认容器中没有的工具,您必须基于- rbe-ubuntu16-04容器创建自定义容器,并包含您需要的工具,如后文所述。
- 构建或测试目标使用的规则与远程执行不兼容。如需详细了解与远程执行的兼容性,请参阅为远程执行调整 Bazel 规则。 
在 rbe_ubuntu1604 CI 配置中使用自定义容器
rbe-ubuntu16-04 容器可通过以下网址公开访问:
http://gcr.io/cloud-marketplace/google/rbe-ubuntu16-04
您可以直接从 Container Registry 拉取该容器,也可以从源代码构建该容器。下面将介绍这两种方式。
在开始之前,请确保您已安装 gcloud、docker 和 git。
如果您要从源代码构建容器,还必须安装最新版本的 Bazel。
从 Container Registry 中拉取 rbe-ubuntu16-04
如需从 Container Registry 拉取 rbe-ubuntu16-04 容器,请运行以下命令:
gcloud docker -- pull gcr.io/cloud-marketplace/google/rbe-ubuntu16-04@sha256:sha256-checksum将 sha256-checksum 替换为最新容器的 SHA256 校验和值。
通过源代码构建 rbe-ubuntu16-04 容器
如需从源代码构建 rbe-ubuntu16-04 容器,请执行以下操作:
- 克隆 - bazel-toolchains代码库:- git clone https://github.com/bazelbuild/bazel-toolchains
- 按照工具链容器中的说明设置工具链容器目标并构建容器。 
- 拉取新构建的容器: - gcloud docker -- pull gcr.io/project-id/custom-container-namesha256-checksum
运行自定义容器
如需运行自定义容器,请执行以下操作之一:
- 如果您是从 Container Registry 拉取容器的,请运行以下命令: - docker run -it gcr.io/cloud-marketplace/google/rbe-ubuntu16-04@sha256:sha256-checksum/bin/bash- 将 - sha256-checksum替换为最新容器的 SHA256 校验和值。
- 如果您是通过源代码构建容器的,请运行以下命令: - docker run -it gcr.io/project-id/custom-container-name@sha256:sha256sum /bin/bash
向自定义容器添加资源
使用 Dockerfile 或 rules_docker 将资源或原始资源的替代版本添加到 rbe-ubuntu16-04 容器中。如果您刚接触 Docker,请阅读以下内容:
例如,以下 Dockerfile 代码段会安装 my_tool_package:
FROM gcr.io/cloud-marketplace/google/rbe-ubuntu16-04@sha256:sha256-checksum
RUN apt-get update && yes | apt-get install -y my_tool_package
将自定义容器推送到 Container Registry
自定义容器后,请按如下方式构建容器映像并将其推送到 Container Registry:
- 构建容器映像: - docker build -t custom-container-name.- docker tag custom-container-name gcr.io/project-id/custom-container-name
- 将容器映像推送到 Container Registry: - gcloud docker -- push gcr.io/project-id/custom-container-name
- 前往以下网址,验证容器已经推送: - https://console.cloud.google.com/gcr/images/project-id/GLOBAL/custom-container-name 
- 记下自定义容器的 SHA256 校验和。您需要在稍后的 build 平台定义中提供此信息。 
- 按照公开提供映像中的说明,将容器配置为可公开访问。 - 如需了解详情,请参阅推送和拉取映像。 
指定 build 平台定义
您必须在自定义工具链配置中添加 Bazel 平台配置,以便 Bazel 选择适合所需硬件/软件平台的工具链。如需自动生成有效的平台,您可以向 WORKSPACE 添加一个名称为 buildkite_config 的 rbe_autoconfig 目标,其中包含用于选择自定义容器的其他属性。如需详细了解此设置,请参阅 rbe_autoconfig 的最新文档。