Memanggil Bazel dari skrip

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

Anda dapat memanggil Bazel dari skrip untuk menjalankan build, menjalankan pengujian, atau membuat kueri grafik dependensi. Bazel telah didesain untuk memungkinkan skrip yang efektif, tetapi bagian ini mencantumkan beberapa detail yang harus diperhatikan untuk membuat skrip Anda lebih kuat.

Memilih basis output

Opsi --output_base mengontrol tempat proses Bazel harus menulis output build, serta berbagai file kerja yang digunakan secara internal oleh Bazel, yang salah satunya adalah kunci yang melindungi dari mutasi basis output serentak oleh beberapa proses Bazel.

Memilih direktori dasar output yang benar untuk skrip bergantung pada beberapa faktor. Jika Anda perlu menempatkan output build di lokasi tertentu, tindakan ini akan mendikte basis output yang perlu Anda gunakan. Jika Anda melakukan panggilan "hanya baca" ke Bazel (seperti bazel query), faktor penguncian akan menjadi lebih penting. Khususnya, jika perlu menjalankan beberapa instance skrip secara serentak, Anda harus memberikan dasar output yang berbeda (atau acak).

Jika menggunakan nilai dasar output default, Anda akan bersaing untuk mendapatkan kunci yang sama dengan yang digunakan oleh perintah Bazel interaktif pengguna. Jika pengguna mengeluarkan perintah yang berjalan lama seperti build, skrip Anda harus menunggu perintah tersebut selesai sebelum dapat dilanjutkan.

Catatan tentang mode server

Secara default, Bazel menggunakan proses server yang berjalan lama sebagai pengoptimalan. Saat menjalankan Bazel dalam skrip, jangan lupa untuk memanggil shutdown ketika Anda sudah selesai menggunakan server. Atau, tentukan --max_idle_secs=5 agar server nonaktif segera dimatikan.

Kode keluar apa yang akan saya dapatkan?

Bazel mencoba membedakan kegagalan karena kode sumber sedang dipertimbangkan dari error eksternal yang mencegah Bazel dijalankan dengan benar. Eksekusi Bazel dapat menghasilkan kode keluar berikut:

Keluar dari Kode yang umum untuk semua perintah:

  • 0 - Berhasil
  • 2 - Masalah Command Line, tanda Buruk atau Ilegal atau kombinasi perintah, atau Variabel Lingkungan Buruk. Command line harus diubah.
  • 8 - Build Terganggu, tetapi kami menghentikannya dengan penghentian yang teratur.
  • 9 - Kunci server ditahan dan --noblock_for_lock diteruskan.
  • 32 - Kegagalan Lingkungan Eksternal tidak ada pada mesin ini.

  • 33 - Bazel kehabisan memori dan tidak bekerja. Anda perlu mengubah command line.

  • 34 - Disimpan untuk penggunaan internal Google.

  • 35 - Disimpan untuk penggunaan internal Google.

  • 36 - Masalah Lingkungan Lokal, dicurigai permanen.

  • 37 - Error Tidak Tertangani/Internal Bazel Internal.

  • 38 - Disimpan untuk penggunaan internal Google.

  • 41-44 - Disimpan untuk penggunaan internal Google.

  • 45 - Terjadi error saat memublikasikan hasil ke Build Event Service.

  • 47 - Disimpan untuk penggunaan internal Google.

Menampilkan kode untuk perintah bazel build, bazel test:

  • 1 - Build gagal.
  • 3 - Build OK, tetapi beberapa pengujian gagal atau waktunya habis.
  • 4 - Build berhasil, tetapi tidak ada pengujian yang ditemukan meskipun pengujian diminta.

Untuk bazel run:

  • 1 - Build gagal.
  • Jika build berhasil, tetapi subproses yang dieksekusi menampilkan kode keluar bukan nol, kode keluarnya juga akan menjadi kode keluar.

Untuk bazel query:

  • 3 - Berhasil sebagian, tetapi kueri mengalami 1 atau beberapa error dalam kumpulan file BUILD input sehingga hasil operasi tidak 100% andal. Hal ini mungkin disebabkan oleh opsi --keep_going di command line.
  • 7 - Kegagalan perintah.

Versi Bazel yang akan datang dapat menambahkan kode keluar tambahan, yang menggantikan kode keluar kegagalan generik 1 dengan nilai bukan nol yang berbeda dengan arti tertentu. Namun, semua nilai keluar bukan nol akan selalu merupakan error.

Membaca file .bazelrc

Secara default, Bazel membaca file .bazelrc dari direktori ruang kerja dasar atau direktori beranda pengguna. Apakah ini diinginkan atau tidak adalah pilihan untuk skrip Anda; jika skrip harus benar-benar sempurna (seperti saat membuat build rilis), Anda harus menonaktifkan pembacaan file .bazelrc menggunakan opsi --bazelrc=/dev/null. Jika Anda ingin menjalankan build menggunakan setelan pilihan pengguna, perilaku defaultnya lebih baik.

Log perintah

Output Bazel juga tersedia dalam file log perintah yang dapat Anda temukan dengan perintah berikut:

bazel info command_log

File log perintah berisi aliran stdout dan stderr yang disisipkan dari perintah Bazel terbaru. Perlu diperhatikan bahwa menjalankan bazel info akan menimpa konten file ini, karena konten tersebut kemudian menjadi perintah Bazel terbaru. Namun, lokasi file log perintah tidak akan berubah kecuali jika Anda mengubah setelan opsi --output_base atau --output_user_root.

Mengurai output

Output Bazel cukup mudah untuk diurai untuk berbagai tujuan. Dua opsi yang dapat membantu skrip Anda adalah --noshow_progress yang menyembunyikan pesan progres, dan --show_result n, yang mengontrol apakah pesan "build terbaru" akan dicetak atau tidak; pesan ini dapat diuraikan untuk menemukan target mana yang berhasil dibuat, dan lokasi file output yang mereka buat. Pastikan untuk menentukan nilai n yang sangat besar jika Anda mengandalkan pesan ini.

Memecahkan masalah performa dengan pembuatan profil

Lihat bagian Pembuatan Profil Performa.