このページは、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ファイルへの変更を含む pull リクエストを送信します。( pull リクエストの例をご覧ください)。ビルド結果を表示するには、下の図に示すように、GitHub で RBE(Ubuntu 16.04)の pull リクエスト チェックの [詳細] をクリックします。このリンク は、pull リクエストがマージされ、CI テスト が実行された後に使用可能になります。( 結果の例をご覧ください)。

(省略可)ブランチ保護ルールでマージする前に合格する必要があるテストとして、bazel test(RBE(Ubuntu 16.04)) チェックを設定します。この設定は、次の図に示すように、GitHub の [設定] > [ブランチ] > [ブランチ保護ルール] にあります。

ビルドとテストの失敗のトラブルシューティング
ビルドまたはテストが失敗した場合は、次の原因が考えられます。
必要なビルドツールまたはテストツールがデフォルト コンテナにインストールされていない。
rbe_ubuntu1604構成を使用するビルドは、デフォルトでrbe-ubuntu16-04コンテナ内で実行されます。このコンテナには、多くの Bazel ビルドに共通するツールが含まれています。ただし、ルールでデフォルト コンテナにないツールが必要な場合は、 カスタム コンテナをrbe-ubuntu16-04コンテナに基づいて作成し、後述のようにこれらのツールを含める必要があります。ビルドまたはテストのターゲットで、リモート 実行と互換性のないルールが使用されている。リモート実行との互換性の詳細については、 リモート実行用に Bazel ルールを調整するをご覧ください。
rbe_ubuntu1604 CI 構成でカスタム コンテナを使用する
rbe-ubuntu16-04 コンテナは、次の URL で一般公開されています。
http://gcr.io/cloud-marketplace/google/rbe-ubuntu16-04
Container Registry から直接 pull することも、ソースからビルドすることもできます。次のセクションでは、両方の方法について説明します。
始める前に、gcloud、docker、git がインストールされていることを確認してください。
ソースからコンテナをビルドする場合は、最新
バージョンの Bazel もインストールする必要があります。
Container Registry から rbe-ubuntu16-04 を pull する
Container Registry から rbe-ubuntu16-04 コンテナを pull するには、次のコマンドを実行します。
gcloud docker -- pull gcr.io/cloud-marketplace/google/rbe-ubuntu16-04@sha256:sha256-checksumsha256-checksum は、 最新のコンテナの SHA256 チェックサム値に置き換えます。
ソースから rbe-ubuntu16-04 コンテナをビルドする
ソースから rbe-ubuntu16-04 コンテナをビルドするには、次の操作を行います。
bazel-toolchainsリポジトリのクローンを作成します。git clone https://github.com/bazelbuild/bazel-toolchains新しくビルドしたコンテナを pull します。
gcloud docker -- pull gcr.io/project-id/custom-container-namesha256-checksum
カスタム コンテナを実行する
カスタム コンテナを実行するには、次のいずれかを行います。
Container Registry からコンテナを pull した場合は、次の コマンドを実行します。
docker run -it gcr.io/cloud-marketplace/google/rbe-ubuntu16-04@sha256:sha256-checksum/bin/bashsha256-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 に push する
コンテナをカスタマイズしたら、次のようにコンテナ イメージをビルドして Container Registry に push します。
コンテナ イメージをビルドします。
docker build -t custom-container-name.docker tag custom-container-name gcr.io/project-id/custom-container-nameコンテナ イメージを Container Registry に push します。
gcloud docker -- push gcr.io/project-id/custom-container-name次の URL に移動して、コンテナが push されたことを確認します。
https://console.cloud.google.com/gcr/images/project-id/GLOBAL/custom-container-name
カスタム コンテナの SHA256 チェックサムをメモします。これは、後でビルド プラットフォーム定義で 指定する必要があります。
イメージを一般公開するの説明に沿って、コンテナを一般公開アクセス用に構成します。
詳細については、 イメージの push と pullをご覧ください。
ビルド プラットフォーム定義を指定する
カスタム ツールチェーンの構成に Bazel プラットフォーム の構成を含める必要があります。これにより、Bazel
は目的のハードウェア/ソフトウェア プラットフォームに適したツールチェーンを選択できます。有効なプラットフォームを自動的に生成するには、カスタムコンテナを選択するための追加の属性を含む buildkite_config という名前の
rbe_autoconfig ターゲットを WORKSPACE に追加します。この設定の詳細については、
rbe_autoconfig の最新のドキュメントをご覧ください。