本页面适用于 Bazel 规则代码库的所有者和维护者。它 介绍了如何配置 Bazel 持续集成 (CI) 系统, 您的代码库,以测试规则是否与远程执行兼容 场景。此页面上的说明适用于存储在 GitHub 代码库。
前提条件
在完成本页面中的步骤之前,请确保:
- GitHub 代码库是 Bazel GitHub 组织。
- 您已按照说明为代码库配置了 Buildkite。 Bazel 持续集成。
设置 Bazel CI 以进行测试
在
.bazelci/presubmit.yml
文件中,执行以下操作:a. 添加一个名为
rbe_ubuntu1604
的配置。b. 在
rbe_ubuntu1604
配置中,添加要针对远程执行进行测试的构建和测试目标。添加
bazel-toolchains
将 GitHub 代码库固定到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
文件的更改。(请参阅 拉取请求示例)。如需查看构建结果,请点击 RBE (Ubuntu) 的详细信息 16.04)拉取请求检查,如下图所示。此链接 在拉取请求合并且 CI 测试后可用 。(请参阅 结果示例。)
(可选)将 bazel test (RBE (Ubuntu 16.04)) 检查设置为测试 测试通过后才能合并到分支保护规则中。设置 位于 GitHub 中的 Settings >分支 >分支保护规则 如下图所示。
对失败的构建和测试进行问题排查
如果您的构建或测试失败,原因可能如下:
默认容器中未安装所需的构建或测试工具。 使用
rbe_ubuntu1604
配置的构建默认在rbe-ubuntu16-04
容器,其中包含许多 Bazel 构建通用的工具。但是,如果 您的规则要求使用默认容器中不存在的工具, 根据 GCP 控制台中的rbe-ubuntu16-04
并加入这些工具(如后文所述)。构建或测试目标使用的规则与远程 执行。请参阅 针对 Remote Execution 调整 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
替换为 最新的容器。如果您是通过源代码构建容器的,请运行以下命令:
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 校验和。您需要 您稍后在构建平台定义中提供此 ID。
按照公开说明将容器配置为允许公开访问 如 公开提供图片。
如需了解详情,请参阅 推送和拉取映像。
指定构建平台定义
您必须在项目中添加 Bazel 平台配置,
自定义工具链配置,可让 Bazel 选择工具链
适合所需的硬件/软件平台。要生成
自动成为有效的平台,您可以向 WORKSPACE
添加
名称为“buildkite_config
”的rbe_autoconfig
目标,其中包含额外的
属性以选择您的自定义容器。有关此设置的详细信息,请参阅
查看 rbe_autoconfig
的最新文档。