Anda dapat memanggil Bazel dari skrip untuk menjalankan build, menjalankan pengujian, atau membuat kueri grafik dependensi. Bazel telah dirancang untuk memungkinkan pembuatan skrip yang efektif, tetapi bagian ini mencantumkan beberapa detail yang perlu diingat untuk membuat skrip Anda lebih kokoh.
Memilih basis output
Opsi --output_base
mengontrol tempat proses Bazel akan menulis
output build, serta berbagai file kerja yang digunakan secara internal oleh
Bazel. Salah satunya adalah kunci yang melindungi dari mutasi serentak
dasar output oleh beberapa proses Bazel.
Pemilihan direktori dasar output yang benar untuk skrip Anda 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. Secara
khusus, jika Anda perlu menjalankan beberapa instance skrip secara serentak,
Anda harus memberikan basis output yang berbeda (atau acak) untuk masing-masing instance.
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 hingga 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
saat Anda selesai dengan server, atau menentukan --max_idle_secs=5
agar
server tidak ada aktivitas segera mati.
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 exit code berikut:
Kode Keluar yang umum untuk semua perintah:
0
- Berhasil2
- Masalah Command Line, flag atau kombinasi perintah yang Buruk atau Ilegal, atau Variabel Lingkungan yang Buruk. Command line Anda harus diubah.8
- Build Terganggu, tetapi kami menghentikannya dengan penonaktifan secara terorganisir.9
- Kunci server ditahan dan--noblock_for_lock
diteruskan.32
- Kegagalan Lingkungan Eksternal tidak terjadi pada mesin ini.33
- Bazel kehabisan memori dan error. Anda perlu mengubah command line.34
- Disediakan untuk penggunaan internal Google.35
- Disediakan untuk penggunaan internal Google.36
- Masalah Lingkungan Lokal, dicurigai permanen.37
- Pengecualian yang Tidak Tertangani / Error Bazel Internal.38
- Disediakan untuk penggunaan internal Google.41-44
- Disediakan untuk penggunaan internal Google.45
- Terjadi error saat memublikasikan hasil ke Layanan Peristiwa Build.47
- Disediakan untuk penggunaan internal Google.
Kode pengembalian untuk perintah bazel build
, bazel test
:
1
- Build gagal.3
- Build OK, tetapi beberapa pengujian gagal atau waktu 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, itu juga akan menjadi kode keluar dari perintah tersebut.
Untuk bazel query
:
3
- Berhasil sebagian, tetapi kueri menemukan 1 atau lebih error dalam kumpulan file BUILD input sehingga hasil operasi tidak 100% dapat diandalkan. Hal ini mungkin karena opsi--keep_going
pada command line.7
- Kegagalan perintah.
Versi Bazel mendatang dapat menambahkan exit code tambahan, yang menggantikan kode keluar kegagalan umum 1
dengan nilai bukan nol yang berbeda dengan arti tertentu.
Namun, semua nilai keluar yang bukan nol akan selalu menghasilkan error.
Membaca file .bazelrc
Secara default, Bazel akan membaca file .bazelrc
dari direktori
ruang kerja dasar atau direktori beranda pengguna. Apakah hal ini
diinginkan atau tidak untuk skrip Anda; jika skrip harus benar-benar
hermetis (seperti saat melakukan build rilis), Anda harus menonaktifkan pembacaan file
.bazelrc menggunakan opsi --bazelrc=/dev/null
. Jika Anda ingin menjalankan
build menggunakan setelan pilihan pengguna, perilaku default-nya 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 stream stdout dan stderr yang disisipkan dari
perintah Bazel terbaru. Perlu diketahui bahwa menjalankan bazel info
akan menimpa
konten file ini, karena akan 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 diurai untuk berbagai tujuan. Dua opsi yang mungkin berguna untuk 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 diurai untuk menemukan target mana yang berhasil dibuat, dan lokasi file output yang dibuat. Pastikan untuk menentukan nilai yang sangat besar n jika Anda mengandalkan pesan ini.
Memecahkan masalah performa dengan membuat profil
Lihat bagian Pembuatan Profil Performa.