Memanggil Bazel dari skrip

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

Anda bisa memanggil Bazel dari skrip untuk membangun, menjalankan pengujian, atau membuat kueri grafik dependensi. Bazel telah dirancang untuk memungkinkan pembuatan skrip yang efektif, tetapi bagian ini mencantumkan beberapa detail yang perlu diperhatikan untuk membuat skrip andal.

Memilih basis output

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

Memilih direktori basis {i>output<i} yang benar untuk skrip Anda tergantung pada beberapa faktor-faktor. Jika Anda perlu meletakkan output build di lokasi tertentu, ini akan tentukan basis {i>output<i} yang perlu Anda gunakan. Jika Anda membuat "hanya baca" panggilan ke Bazel (seperti bazel query), faktor penguncian akan lebih penting. Di beberapa terutama, jika Anda perlu menjalankan beberapa {i>instance<i} skrip Anda secara serentak, Anda harus memperhatikan bahwa setiap proses server Blaze dapat menangani paling banyak satu pemanggilan pada satu waktu. Tergantung pada situasi Anda, mungkin masuk akal untuk setiap contoh skrip Anda untuk menunggu gilirannya, atau mungkin masuk akal menggunakan --output_base untuk menjalankan beberapa Server Blaze dan gunakan itu.

Jika Anda menggunakan nilai dasar output default, Anda akan bersaing untuk kunci yang digunakan oleh perintah Bazel interaktif pengguna. Jika pengguna perintah yang berjalan lama seperti build, skrip Anda harus menunggu perintah untuk diselesaikan sebelum melanjutkan.

Catatan tentang mode server

Secara default, Bazel menggunakan proses server yang berjalan lama sebagai pengoptimalan. Saat menjalankan Bazel dalam skrip, jangan lupa memanggil shutdown setelah selesai dengan server, atau, tentukan --max_idle_secs=5 sehingga server yang menganggur mematikan dirinya sendiri.

Kode keluar apa yang akan saya dapatkan?

Bazel mencoba membedakan kegagalan yang disebabkan oleh kode sumber di bawah dari {i>error<i} eksternal yang mencegah Bazel{i> <i}tidak berjalan dengan benar. Eksekusi Bazel dapat menghasilkan exit code berikut:

Kode Keluar yang umum untuk semua perintah:

  • 0 - Berhasil
  • 2 - Masalah Command Line, Flag atau kombinasi perintah Buruk atau Ilegal, atau Variabel Lingkungan Buruk. Command line Anda harus diubah.
  • 8 - Build Terganggu, tetapi kami menghentikan dengan penonaktifan secara teratur.
  • 9 - Kunci server ditahan dan --noblock_for_lock diteruskan.
  • 32 - Kegagalan Lingkungan Eksternal tidak ada di perangkat ini.

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

  • 34 - Direservasi untuk penggunaan internal Google.

  • 35 - Direservasi untuk penggunaan internal Google.

  • 36 - Masalah Lingkungan Setempat, diduga permanen.

  • 37 - Pengecualian yang Tidak Tertangani / Error Bazel Internal.

  • 38 - Terjadi error sementara saat memublikasikan hasil ke Layanan Peristiwa Build.

  • 39 - Blob yang diperlukan Bazel dikeluarkan dari Cache Jarak Jauh.

  • 41-44 - Direservasi untuk penggunaan internal Google.

  • 45 - Terjadi error yang terus-menerus saat memublikasikan hasil ke Layanan Peristiwa Build.

  • 47 - Direservasi untuk penggunaan internal Google.

  • 49 - Direservasi untuk penggunaan internal Google.

Kode pengembalian untuk perintah bazel build, bazel test:

  • 1 - Build gagal.
  • 3 - Build OK, tetapi beberapa pengujian gagal atau waktu tunggu 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 akan menampilkan exit bukan nol {i>code <i}itu juga akan menjadi {i> exit code<i} dari perintah.

Untuk bazel query:

  • 3 - Sebagian berhasil, tetapi kueri mengalami 1 atau beberapa error di memasukkan set file BUILD sehingga hasil operasinya tidak 100% dapat diandalkan. Hal ini mungkin karena ada opsi --keep_going pada command line.
  • 7 - Kegagalan perintah.

Versi Bazel mendatang mungkin akan menambahkan exit code tambahan, yang menggantikan kegagalan generik kode keluar 1 dengan nilai bukan nol yang berbeda dengan arti tertentu. Namun, semua nilai keluar yang bukan nol akan selalu dianggap sebagai error.

Membaca file .bazelrc

Secara default, Bazel membaca file .bazelrc dari dasar direktori ruang kerja atau direktori beranda pengguna. Terserah apakah ini yang diinginkan adalah pilihan untuk skrip Anda; jika naskah Anda harus sempurna hermetic (seperti saat melakukan build rilis), Anda harus menonaktifkan pembacaan .bazelrc dengan menggunakan opsi --bazelrc=/dev/null. Jika Anda ingin melakukan build menggunakan setelan pilihan pengguna, perilaku default-nya lebih baik.

Log perintah

{i>Output<i} Bazel juga tersedia dalam file log perintah yang dapat Anda temukan dengan perintah berikut:

bazel info command_log

File log perintah berisi aliran {i> intersided stdout<i} dan {i>stderr<i} dari perintah Bazel terbaru. Perlu diketahui bahwa menjalankan bazel info akan menimpa isi file ini, karena kemudian menjadi perintah Bazel terbaru. Namun, lokasi file log perintah tidak akan berubah kecuali Anda mengubahnya setelan opsi --output_base atau --output_user_root.

Output penguraian

Output Bazel cukup mudah diurai untuk berbagai tujuan. Dua opsi yang mungkin berguna untuk skrip Anda adalah --noshow_progress yang menghambat progres pesan, dan --show_result n, yang mengontrol apakah bukan "mengembangkan yang terbaru" pesan dicetak; pesan-pesan ini mungkin diurai menjadi menemukan target mana yang berhasil dibangun, dan lokasi {i>outputnya<i} yang mereka buat. Pastikan untuk menentukan nilai n yang sangat besar jika Anda mengandalkan pesan ini.

Memecahkan masalah performa dengan pembuatan profil

Lihat bagian Profiling Performa.