Protokol Peristiwa Build

Laporkan masalah Lihat sumber Per malam · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

Peristiwa Build Protokol (BEP) memungkinkan program pihak ketiga untuk mendapatkan insight tentang pemanggilan Bazel. Sebagai Anda dapat menggunakan BEP untuk mengumpulkan informasi tentang IDE {i>plugin<i} atau dasbor yang menampilkan hasil build.

Protokol tersebut adalah protokol buffer dengan beberapa semantik yang didefinisikan di atasnya. Ini mencakup informasi tentang build dan pengujian hasil, progres build, konfigurasi build, dan banyak lagi. BEP-nya adalah yang dimaksudkan untuk digunakan secara terprogram dan membuat penguraian kode Bazel {i>command line<i} sebelumnya.

Build Event Protocol mewakili informasi tentang build sebagai peristiwa. J adalah pesan buffering protokol yang terdiri dari pengenal peristiwa build, sekumpulan ID peristiwa turunan, dan payload.

  • ID Peristiwa Build: Bergantung pada jenis peristiwa build, ID tersebut mungkin buram {i>string<i} atau terstruktur informasi mengungkapkan lebih banyak tentang peristiwa build. ID peristiwa build bersifat unik dalam sebuah build.

  • Anak-anak: Acara build dapat mengumumkan peristiwa build lainnya, dengan menyertakan ID peristiwa build-nya di turunannya kolom. Misalnya, peristiwa build PatternExpanded mengumumkan target yang diperluas saat masih anak-anak. Protokol menjamin bahwa semua peristiwa, kecuali yang acara, diumumkan oleh peristiwa sebelumnya.

  • Payload: Payload berisi informasi terstruktur tentang peristiwa build, dienkode sebagai pesan buffering protokol khusus untuk peristiwa tersebut. Perhatikan bahwa payload mungkin bukan jenis yang diharapkan, tetapi bisa berupa pesan Aborted jika build dibatalkan sebelum waktunya.

Buat grafik peristiwa

Semua peristiwa build membentuk grafik asiklik terarah melalui induk dan turunannya hubungan. Setiap peristiwa build kecuali untuk peristiwa build awal memiliki satu atau lebih banyak peristiwa induk. Perhatikan bahwa tidak semua acara induk dari acara turunan harus perlu diposting sebelumnya. Saat build selesai (berhasil atau gagal) semua acara yang diumumkan akan diposting. Jika terjadi error pada Bazel atau terjadi kegagalan {i>network transport<i}, beberapa peristiwa build yang diumumkan mungkin tidak pernah diposting.

Struktur grafik peristiwa mencerminkan siklus proses perintah. Setiap BEP grafik memiliki bentuk karakteristik berikut:

  1. Peristiwa root selalu berupa BuildStarted peristiwa. Semua peristiwa lainnya adalah turunannya.
  2. Turunan langsung dari peristiwa BuildStarted berisi metadata tentang perintah.
  3. Peristiwa yang berisi data yang dihasilkan oleh perintah, seperti file yang dibuat dan diuji hasil, muncul sebelum BuildFinished peristiwa.
  4. Peristiwa BuildFinished dapat diikuti menurut peristiwa yang berisi informasi ringkasan tentang build (misalnya, metrik atau pembuatan profil data).

Memakai Build Event Protocol

Memakai dalam format biner

Untuk menggunakan BEP dalam format biner:

  1. Minta Bazel melakukan serialisasi pesan buffering protokol ke file dengan menentukan opsi --build_event_binary_file=/path/to/file. File tersebut akan berisi pesan {i>buffer<i} protokol serial dengan setiap pesan yang dibatasi panjangnya. Setiap pesan diawali dengan panjangnya yang dienkode sebagai bilangan bulat dengan panjang variabel. Format ini dapat dibaca menggunakan library parseDelimitedFrom(InputStream) .

  2. Kemudian, tulis program yang mengekstrak informasi yang relevan dari untuk membuat pesan buffering protokol yang diserialisasi.

Gunakan dalam format teks atau JSON

Penanda baris perintah Bazel berikut akan menghasilkan BEP di format yang dapat dibaca manusia, seperti teks dan JSON:

--build_event_text_file
--build_event_json_file

Layanan Peristiwa Build

Peristiwa Build Layanan Protokol adalah layanan gRPC generik untuk memublikasikan peristiwa build. Peristiwa Build Protokol layanan tidak bergantung pada BEP dan memperlakukan peristiwa BEP sebagai byte buram. Bazel disertai dengan implementasi klien gRPC dari protokol Build Event Service yang memublikasikan peristiwa Build Event Protocol. Kita dapat menentukan endpoint untuk mengirim peristiwa menggunakan tanda --bes_backend=HOST:PORT. Jika backend Anda menggunakan gRPC, Anda harus memberikan awalan untuk alamat dengan skema yang sesuai: grpc:// untuk teks biasa gRPC dan grpcs:// untuk gRPC dengan TLS diaktifkan.

Flag Build Event Service

Bazel memiliki beberapa tanda yang terkait dengan protokol Build Event Service, termasuk:

  • --bes_backend
  • --[no]bes_lifecycle_events
  • --bes_results_url
  • --bes_timeout
  • --bes_instance_name

Untuk deskripsi setiap flag ini, lihat referensi Referensi Command Line.

Autentikasi dan keamanan

Implementasi Build Event Service Bazel juga mendukung autentikasi dan TLS. Setelan ini dapat dikontrol menggunakan tanda di bawah. Perhatikan bahwa penanda juga digunakan untuk Eksekusi Jarak Jauh Bazel. Ini menyiratkan bahwa Build {i>Event Service<i} dan {i>Remote Execution Endpoints<i} harus berbagi autentikasi, dan infrastruktur TLS.

  • --[no]google_default_credentials
  • --google_credentials
  • --google_auth_scopes
  • --tls_certificate
  • --[no]tls_enabled

Untuk deskripsi setiap flag ini, lihat referensi Referensi Command Line.

Membangun Event Service dan cache jarak jauh

BEP biasanya berisi banyak referensi ke file log (test.log, {i>test.xml<i}, dll. ) yang disimpan di komputer tempat Bazel berjalan. Server BES jarak jauh biasanya tidak dapat mengakses file ini karena mereka berada di komputer yang berbeda. Cara untuk cara mengatasi masalah ini adalah menggunakan Bazel dengan remote dalam cache. Bazel akan mengupload semua file output ke cache jarak jauh (termasuk file yang direferensikan pada BEP) dan server BES kemudian dapat mengambil file yang direferensikan dari cache.

Lihat GitHub masalah 3689 untuk secara lebih mendetail.