このページは、Bazel ルール リポジトリのオーナーと管理者を対象としています。ここでは、リポジトリに Bazel 継続的インテグレーション(CI)システムを構成して、リモート実行シナリオに対するルールの互換性をテストする方法について説明します。このページの手順は、GitHub リポジトリに保存されているプロジェクトに適用されます。
Prerequisites
このページの手順を行う前に、次のことを確認してください。
- 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")
変更を pull して
presubmit.yml
ファイルに送信します。(pull リクエストの例をご覧ください)。ビルド結果を表示するには、下図に示すように、GitHub の RBE(Ubuntu 16.04)pull リクエスト チェックの [詳細] をクリックします。このリンクは、pull リクエストがマージされ、CI テストが実行されると使用可能になります。(結果の例をご覧ください)。
(省略可)bazel test(RBE(Ubuntu 16.04))チェックを、ブランチ保護ルールと統合する前に合格する必要があるテストとして設定します。この設定は、次の図に示すように、GitHub の [Settings] > [Branches] > [Branch Protection rules] にあります。
失敗したビルドとテストのトラブルシューティング
ビルドまたはテストが失敗した場合は、次の原因が考えられます。
必要なビルドまたはテストツールがデフォルトのコンテナにインストールされていない。多くの Bazel ビルドに共通のツールを含む、
rbe-ubuntu16-04
コンテナ内でデフォルトで実行されるrbe_ubuntu1604
構成を使用してビルドします。ただし、ルールでデフォルト コンテナに存在しないツールが必要な場合は、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-checksum
sha256-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/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 への 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
の最新のドキュメントをご覧ください。