本页面适用于 Bazel 规则代码库的所有者和维护者。文中介绍了如何为代码库配置 Bazel 持续集成 (CI) 系统,以测试您的规则与远程执行方案的兼容性。本页面中的说明适用于存储在 GitHub 代码库中的项目。
前提条件
在完成本页面上的步骤之前,请确保:
- 您的 GitHub 代码库是 Bazel GitHub 组织的一部分。
- 如 Bazel 持续集成中所述,您已为代码库配置了 Buildkite。
设置 Bazel CI 以进行测试
在
.bazelci/presubmit.yml
文件中,执行以下操作:a. 添加一个名为
rbe_ubuntu1604
的配置。b. 在
rbe_ubuntu1604
配置中,添加您要针对远程执行测试的构建和测试目标。将
bazel-toolchains
GitHub 代码库添加到WORKSPACE
文件中,并固定到最新版本。此外,还要添加一个名为buildkite_config
的rbe_autoconfig
目标。此示例为使用rbe_ubuntu1604
的 BuildKite CI 远程执行创建工具链配置。
load("@bazel_toolchains//rules:rbe_repo.bzl", "rbe_autoconfig")
rbe_autoconfig(name = "buildkite_config")
发送拉取请求,其中包含对
presubmit.yml
文件的更改。(请参阅示例拉取请求。)如需查看构建结果,请点击 GitHub 中 RBE (Ubuntu 16.04) 拉取请求检查的详细信息,如下图所示。合并拉取请求并运行 CI 测试后,此链接将可用。(请参阅示例结果。)
(可选)将 bazel 测试 (RBE (Ubuntu 16.04)) 设为在合并到分支保护规则之前需要通过的测试。此设置位于 GitHub 的设置 > 分支 > 分支保护规则中,如下图所示。
对失败的构建和测试进行问题排查
如果您的构建或测试失败,原因可能如下:
所需的容器或测试工具未安装在默认容器中。 默认情况下,使用
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 校验和。您稍后需要在构建平台定义中提供此名称。
按照公开提供映像中所述,将容器配置为允许公开访问,如公开访问中所述。
如需了解详情,请参阅推送和拉取映像。
指定构建平台定义
您必须在自定义工具链配置中添加 Bazel 平台配置,以便 Bazel 选择适合所需硬件/软件平台的工具链。如需自动生成有效的平台,您可以向 WORKSPACE
添加一个名为 buildkite_config
的 rbe_autoconfig
目标,其中包含用于选择自定义容器的其他属性。如需详细了解此设置,请参阅 rbe_autoconfig
的最新文档。