配置 Bazel CI 以测试远程执行规则

本页面面向 Bazel 规则代码库的所有者和维护者。它 介绍了如何为 您的代码库配置 Bazel 持续集成 (CI) 系统,以针对远程执行 场景测试规则的兼容性。本页面上的说明适用于存储在 GitHub 代码库中的项目。

前提条件

在完成本页面上的步骤之前,请确保满足以下条件:

设置 Bazel CI 以进行测试

  1. .bazelci/presubmit.yml 文件中,执行以下操作:

    a. 添加名为 rbe_ubuntu1604 的配置。

    b. 在 rbe_ubuntu1604 配置中,添加您要针对远程执行进行测试的 build 和测试目标。

  2. bazel-toolchains GitHub 代码库添加到您的 WORKSPACE 文件,并固定到 最新版本。此外,还要添加一个名为 buildkite_configrbe_autoconfig 目标。此示例 使用 BuildKite CI 为 rbe_ubuntu1604 创建远程执行的工具链配置。

load("@bazel_toolchains//rules:rbe_repo.bzl", "rbe_autoconfig")
rbe_autoconfig(name = "buildkite_config")
  1. 发送包含对 presubmit.yml 文件所做更改的拉取请求。(请参阅示例拉取请求。)

  2. 如需查看 build 结果,请点击 GitHub 中 RBE (Ubuntu 16.04) 拉取请求检查的详情,如下图所示。此链接会在拉取请求合并且 CI 测试运行后显示。(请参阅示例结果。)

    示例结果

  3. (可选)将 bazel test (RBE (Ubuntu 16.04)) 检查设置为在合并到分支保护规则之前必须通过的测试。该设置 位于 GitHub 中的设置 > 分支 > 分支保护规则, 如下图所示。

    分支保护规则设置

问题排查:build 和测试失败

如果 build 或测试失败,很可能是由于以下原因:

  • 默认容器中未安装必需的 build 或测试工具。 使用 rbe_ubuntu1604 配置构建时,默认在 rbe-ubuntu16-04 容器内运行,该容器包含许多 Bazel 构建通用的工具。不过,如果您的规则需要默认容器中没有的工具,您必须基于 rbe-ubuntu16-04 容器创建自定义容器,并包含您需要的工具,如后文所述。

  • build 或测试目标使用的规则与远程 执行不兼容。如需详细了解与远程执行的兼容性,请参阅 针对远程执行调整 Bazel 规则

在 rbe_ubuntu1604 CI 配置中使用自定义容器

rbe-ubuntu16-04 容器可在以下网址公开获取:

http://gcr.io/cloud-marketplace/google/rbe-ubuntu16-04

您可以直接从 Container Registry 拉取该容器,也可以从源代码构建该容器。下面将介绍这两种方式。

在开始之前,请确保您已安装 gclouddockergit。 如果您要从源代码构建容器,还必须安装最新 版本的 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 容器,请执行以下操作:

  1. 克隆 bazel-toolchains 代码库:

    git clone https://github.com/bazelbuild/bazel-toolchains
  2. 按照 工具链容器中的说明设置工具链容器目标并构建容器。

  3. 拉取新构建的容器:

    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

向自定义容器添加资源

使用 Dockerfilerules_dockerrbe-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,如下所示:

  1. 构建容器映像:

    docker build -t custom-container-name.
    docker tag custom-container-name gcr.io/project-id/custom-container-name
  2. 将容器映像推送到 Container Registry:

    gcloud docker -- push gcr.io/project-id/custom-container-name
  3. 前往以下网址,验证容器已经推送:

    https://console.cloud.google.com/gcr/images/project-id/GLOBAL/custom-container-name

  4. 记下自定义容器的 SHA256 校验和。您稍后需要在 build 平台定义中 提供此校验和。

  5. 按照公开提供映像中的说明,将容器配置为公开访问。

    如需了解详情,请参阅 推送和拉取映像

指定 build 平台定义

您必须在您的 自定义工具链配置中添加 Bazel 平台 配置,以便 Bazel 选择适合所需硬件/软件平台的工具链 。如需自动生成 有效平台,您可以向 WORKSPACE 添加一个 rbe_autoconfig目标,其名称为 buildkite_config,该目标包含用于选择自定义容器的其他 属性。如需详细了解此设置,请参阅 rbe_autoconfig的最新文档。