Halaman ini ditujukan untuk pemilik dan pengelola repositori aturan Bazel. Panduan ini menjelaskan cara mengonfigurasi sistem Bazel Continuous Integration (CI) untuk repositori Anda guna menguji kompatibilitas aturan terhadap skenario eksekusi jarak jauh. Petunjuk di halaman ini berlaku untuk project yang disimpan di repositori GitHub.
Prasyarat
Sebelum menyelesaikan langkah-langkah di halaman ini, pastikan hal-hal berikut:
- Repositori GitHub Anda adalah bagian dari organisasi GitHub Bazel.
- Anda telah mengonfigurasi Buildkite untuk repositori seperti yang dijelaskan dalam Continuous Integration Bazel.
Menyiapkan Bazel CI untuk pengujian
Di file
.bazelci/presubmit.yml
, lakukan hal berikut:a. Tambahkan konfigurasi bernama
rbe_ubuntu1604
.b. Dalam konfigurasi
rbe_ubuntu1604
, tambahkan target build dan pengujian yang ingin Anda uji terhadap eksekusi jarak jauh.Tambahkan repositori GitHub
bazel-toolchains
ke fileWORKSPACE
Anda, yang disematkan ke rilis terbaru. Tambahkan juga targetrbe_autoconfig
dengan namabuildkite_config
. Contoh ini membuat konfigurasi toolchain untuk eksekusi jarak jauh dengan BuildKite CI untukrbe_ubuntu1604
.
load("@bazel_toolchains//rules:rbe_repo.bzl", "rbe_autoconfig")
rbe_autoconfig(name = "buildkite_config")
Kirim permintaan pull dengan perubahan Anda pada file
presubmit.yml
. (Lihat contoh permintaan pull.)Untuk melihat hasil build, klik Details untuk pemeriksaan permintaan pull RBE (Ubuntu 16.04) di GitHub, seperti yang ditunjukkan pada gambar di bawah. Link ini tersedia setelah permintaan pull digabungkan dan pengujian CI berjalan. (Lihat contoh hasil.)
(Opsional) Tetapkan pemeriksaan bazel test (RBE (Ubuntu 16.04)) sebagai pengujian yang harus lulus sebelum penggabungan dalam aturan perlindungan cabang Anda. Setelan ini berada di GitHub di Settings > Branches > Branch protection rules, seperti ditunjukkan pada gambar berikut.
Memecahkan masalah build dan pengujian yang gagal
Jika build atau pengujian Anda gagal, kemungkinan hal ini terjadi karena hal berikut:
Alat build atau pengujian yang diperlukan tidak diinstal di penampung default. Build yang menggunakan konfigurasi
rbe_ubuntu1604
dijalankan secara default di dalam penampungrbe-ubuntu16-04
, yang mencakup alat yang umum untuk banyak build Bazel. Namun, jika aturan Anda memerlukan alat yang tidak ada dalam penampung default, Anda harus membuat penampung kustom berdasarkan penampungrbe-ubuntu16-04
dan menyertakan alat tersebut seperti yang dijelaskan nanti.Target build atau pengujian menggunakan aturan yang tidak kompatibel dengan eksekusi jarak jauh. Lihat Menyesuaikan Aturan Bazel untuk Eksekusi Jarak Jauh untuk mengetahui detail tentang kompatibilitas dengan eksekusi jarak jauh.
Menggunakan penampung kustom dalam konfigurasi CI rbe_ubuntu1604
Penampung rbe-ubuntu16-04
tersedia secara publik di URL berikut:
http://gcr.io/cloud-marketplace/google/rbe-ubuntu16-04
Anda dapat mengambilnya langsung dari Container Registry atau membangunnya dari sumber. Bagian berikut menjelaskan kedua opsi tersebut.
Sebelum memulai, pastikan Anda telah menginstal gcloud
, docker
, dan git
.
Jika mem-build penampung dari sumber, Anda juga harus menginstal Bazel versi
terbaru.
Mengambil rbe-ubuntu16-04 dari Container Registry
Untuk mengambil container rbe-ubuntu16-04
dari Container Registry, jalankan perintah berikut:
gcloud docker -- pull gcr.io/cloud-marketplace/google/rbe-ubuntu16-04@sha256:sha256-checksum
Ganti sha256-checksum dengan nilai checksum SHA256 untuk penampung terbaru.
Mem-build container rbe-ubuntu16-04 dari sumber
Untuk mem-build penampung rbe-ubuntu16-04
dari sumber, lakukan hal berikut:
Membuat cloning
bazel-toolchains
repositori:git clone https://github.com/bazelbuild/bazel-toolchains
Siapkan target penampung toolchain dan build penampung seperti yang dijelaskan dalam Penampung Toolchain.
Tarik container yang baru dibuat:
gcloud docker -- pull gcr.io/project-id/custom-container-namesha256-checksum
Menjalankan container kustom
Untuk menjalankan penampung kustom, lakukan salah satu hal berikut:
Jika Anda mengambil container dari Container Registry, jalankan perintah berikut:
docker run -it gcr.io/cloud-marketplace/google/rbe-ubuntu16-04@sha256:sha256-checksum/bin/bash
Ganti
sha256-checksum
dengan nilai checksum SHA256 untuk container terbaru.Jika Anda mem-build container dari sumber, jalankan perintah berikut:
docker run -it gcr.io/project-id/custom-container-name@sha256:sha256sum /bin/bash
Menambahkan resource ke penampung kustom
Gunakan Dockerfile
atau
rules_docker
untuk menambahkan resource atau
versi alternatif dari resource asli ke penampung rbe-ubuntu16-04
.
Jika Anda baru menggunakan Docker, baca artikel berikut:
Misalnya, cuplikan Dockerfile
berikut menginstal 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
Mengirim container kustom ke Container Registry
Setelah Anda menyesuaikan penampung, build image penampung dan kirimkan ke Container Registry sebagai berikut:
Build image container:
docker build -t custom-container-name.
docker tag custom-container-name gcr.io/project-id/custom-container-name
Kirim image container ke Container Registry:
gcloud docker -- push gcr.io/project-id/custom-container-name
Buka URL berikut untuk memverifikasi bahwa penampung telah di-push:
https://console.cloud.google.com/gcr/images/project-id/GLOBAL/custom-container-name
Catat checksum SHA256 penampung kustom Anda. Anda harus menyediakan definisi platform build nanti.
Konfigurasikan penampung untuk akses publik seperti yang dijelaskan dalam akses publik yang dapat diakses seperti yang dijelaskan dalam Menayangkan gambar secara publik.
Untuk informasi selengkapnya, lihat Mendorong dan Menarik Gambar.
Menentukan definisi platform build
Anda harus menyertakan konfigurasi platform Bazel dalam
konfigurasi toolchain kustom, yang memungkinkan Bazel memilih toolchain
yang sesuai dengan platform hardware/software yang diinginkan. Untuk membuat
platform yang valid secara otomatis, Anda dapat menambahkan
target rbe_autoconfig
ke WORKSPACE
dengan nama buildkite_config
yang menyertakan atribut
tambahan untuk memilih penampung kustom Anda. Untuk mengetahui detail tentang penyiapan ini, baca
dokumentasi terbaru untuk rbe_autoconfig
.