設定 Bazel CI 來測試遠端執行的規則

回報問題 查看原始碼 Nightly · 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

本頁面適用於 Bazel 規則存放區的擁有者和維護者。說明如何為存放區設定 Bazel 持續整合 (CI) 系統,以便測試規則與遠端執行情境的相容性。本頁面上的操作說明適用於儲存在 GitHub 存放區中的專案。

必要條件

完成本頁的步驟之前,請確認下列事項:

設定 Bazel CI 進行測試

  1. 在您的 .bazelci/presubmit.yml 檔案中執行下列操作:

    a. 新增名為 rbe_ubuntu1604 的設定。

    b. 在 rbe_ubuntu1604 設定中,新增您要對遠端執行作業進行測試的建構和測試目標。

  2. bazel-toolchains GitHub 存放區新增至 WORKSPACE 檔案,並固定至最新版本。同時新增名為 buildkite_configrbe_autoconfig 目標。這個範例會為 rbe_ubuntu1604 使用 BuildKite CI 建立工具鏈設定,以便進行遠端執行。

load("@bazel_toolchains//rules:rbe_repo.bzl", "rbe_autoconfig")
rbe_autoconfig(name = "buildkite_config")
  1. 將變更內容傳送至 presubmit.yml 檔案的拉取要求。(請參閱提取要求範例)。

  2. 如要查看建構結果,請在 GitHub 中按一下 RBE (Ubuntu 16.04) 提取要求檢查的 [詳細資料],如下圖所示。在已合併提取要求且執行持續整合測試後,這個連結就會提供使用。(請參閱結果範例)。

    搜尋結果範例

  3. (選用) 將 bazel test (RBE (RBE (RBE) 16.04)) 檢查設為您必須先通過測試,才能合併分支保護規則。這項設定位於 GitHub 的「Settings」>「Branches」>「Branch protection rules」,如下圖所示。

    分支保護規則設定

排解建構和測試失敗的問題

如果建構或測試失敗,可能是因為下列原因:

  • 未在預設容器中安裝必要的建構或測試工具。根據預設,使用 rbe_ubuntu1604 設定建構的建構作業會在 rbe-ubuntu16-04 容器內執行,其中包含許多 Bazel 建構作業常用的工具。不過,如果您的規則需要預設容器中沒有的工具,則必須根據 rbe-ubuntu16-04 容器建立自訂容器,並納入這些工具,後續說明。

  • 建構或測試目標使用的規則與遠端執行不相容。如要進一步瞭解與遠端執行的相容性,請參閱為 Remote Execution 調整 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_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,如下所示:

  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 總和檢查碼。您稍後需要在建構平台定義中提供此值。

  5. 按照公開提供映像檔一節所述,將容器設定為可公開存取。

    詳情請參閱「推送及拉取圖片」。

指定建構平台定義

您必須在自訂工具鍊設定中加入 Bazel 平台設定,才能讓 Bazel 選擇適合所需硬體/軟體平台的工具鍊。如要自動產生有效的平台,您可以在 WORKSPACE 中新增名稱為 buildkite_configrbe_autoconfig 目標,其中包含其他屬性,可用來選取自訂容器。如需此設定的詳細資訊,請參閱 rbe_autoconfig 的最新說明文件。