Protokol Peristiwa Build

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.
Laporkan masalah Lihat sumber

Dengan Build Event Protocol (BEP), program pihak ketiga dapat memperoleh insight tentang pemanggilan Bazel. Misalnya, Anda dapat menggunakan BEP untuk mengumpulkan informasi untuk plugin IDE atau dasbor yang menampilkan hasil build.

Protokol adalah sekumpulan pesan buffering protokol dengan beberapa semantik yang ditentukan di atasnya. Data ini mencakup informasi tentang hasil build dan pengujian, progres build, konfigurasi build, dan banyak lagi. BEP ditujukan untuk digunakan secara terprogram dan membuat penguraian command line Bazel menjadi sesuatu yang lalu.

Protokol Peristiwa Build mewakili informasi tentang build sebagai peristiwa. Peristiwa build adalah pesan buffering protokol yang terdiri dari ID peristiwa build, kumpulan ID peristiwa turunan, dan payload.

  • ID Peristiwa Build: Bergantung pada jenis peristiwa build, yang mungkin berupa string buram atau informasi terstruktur yang lebih menjelaskan peristiwa build. ID peristiwa build bersifat unik dalam build.

  • Children: Peristiwa build dapat mengumumkan peristiwa build lainnya, dengan menyertakan ID peristiwa build dalam kolom turunan. Misalnya, peristiwa build PatternExpanded mengumumkan target yang diperluas sebagai turunan. Protokol menjamin bahwa semua peristiwa, kecuali peristiwa pertama, diumumkan oleh peristiwa sebelumnya.

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

Grafik peristiwa build

Semua peristiwa build membentuk grafik asiklik terarah melalui hubungan induk dan turunannya. Setiap peristiwa build kecuali untuk peristiwa build awal memiliki satu atau beberapa peristiwa induk. Harap diperhatikan bahwa tidak semua peristiwa induk pada peristiwa turunan harus diposting sebelum peristiwa tersebut. Saat build selesai (berhasil atau gagal), semua peristiwa yang diumumkan akan diposting. Jika terjadi error pada Bazel atau transportasi jaringan yang gagal, beberapa peristiwa build yang diumumkan mungkin tidak akan pernah diposting.

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

  1. Peristiwa root selalu berupa peristiwa BuildStarted. Semua peristiwa lainnya adalah turunannya.
  2. Turunan langsung peristiwa BuildStarted berisi metadata tentang perintah tersebut.
  3. Peristiwa yang berisi data yang dihasilkan oleh perintah, seperti file yang di-build dan hasil pengujian, akan muncul sebelum peristiwa BuildFinished.
  4. Peristiwa BuildFinished dapat diikuti dengan peristiwa yang berisi informasi ringkasan tentang build (misalnya, metrik atau data profiling).

Memakai Protokol Peristiwa Build

Gunakan dalam format biner

Untuk menggunakan BEP dalam format biner:

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

  2. Kemudian, tulis program yang mengekstrak informasi yang relevan dari pesan buffering protokol serial.

Gunakan dalam format teks atau JSON

Tanda command line Bazel berikut akan menghasilkan BEP dalam format yang dapat dibaca manusia, seperti teks dan JSON:

--build_event_text_file
--build_event_json_file

Membuat Layanan Peristiwa

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

Membuat flag Service Event

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

  • --bes_backend
  • --[no]bes_best_effort
  • --[no]bes_lifecycle_events
  • --bes_results_url
  • --bes_timeout
  • --project_id

Untuk deskripsi setiap flag ini, lihat 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 flag ini juga digunakan untuk Remote Execution Bazel. Ini menyiratkan bahwa Endpoint Layanan Peristiwa Build dan Remote Execution perlu berbagi autentikasi dan infrastruktur TLS yang sama.

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

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

Mem-build Layanan Peristiwa dan caching jarak jauh

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

Lihat Masalah GitHub 3689 untuk detail selengkapnya.