Anda dapat memanggil Bazel dari skrip untuk melakukan 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 andal.
Memilih basis output
Opsi --output_base
mengontrol tempat proses Bazel harus menulis
output build, serta berbagai file kerja yang digunakan secara internal oleh
Bazel, salah satunya adalah kunci yang melindungi dari mutasi serentak
basis output 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, hal ini akan
menentukan basis output yang perlu Anda gunakan. Jika Anda melakukan panggilan "hanya baca" ke
Bazel (seperti bazel query
), faktor penguncian akan lebih penting. Secara khusus, jika Anda perlu menjalankan beberapa instance skrip secara serentak, Anda harus memperhatikan bahwa setiap proses server Blaze dapat menangani maksimal satu pemanggilan pada satu waktu.
Bergantung pada situasi Anda, sebaiknya setiap instance skrip Anda menunggu gilirannya, atau sebaiknya gunakan --output_base
untuk menjalankan beberapa server Blaze dan menggunakannya.
Jika menggunakan nilai dasar output default, Anda akan bersaing untuk mendapatkan kunci yang sama 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
saat Anda selesai menggunakan server, atau, tentukan --max_idle_secs=5
agar
server yang tidak ada aktivitasnya segera dinonaktifkan.
Kode exit apa yang akan saya dapatkan?
Bazel mencoba membedakan kegagalan karena kode sumber yang sedang dipertimbangkan dari error eksternal yang mencegah Bazel dieksekusi dengan benar. Eksekusi Bazel dapat menghasilkan kode keluar 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 yang teratur.9
- Kunci server ditahan dan--noblock_for_lock
diteruskan.32
- Kegagalan Lingkungan Eksternal tidak ada di perangkat ini.33
- Bazel kehabisan memori dan mengalami error. Anda perlu mengubah command line.34
- Direservasi untuk penggunaan internal Google.35
- Direservasi untuk penggunaan internal Google.36
- Masalah Lingkungan Lokal, diduga permanen.37
- Pengecualian yang Tidak Ditangani / Error Bazel Internal.38
- Error sementara memublikasikan hasil ke Layanan Peristiwa Build.39
- Blob yang diperlukan oleh Bazel dihapus dari Cache Jarak Jauh.41-44
- Direservasi untuk penggunaan internal Google.45
- Error persisten memublikasikan hasil ke Layanan Peristiwa Build.47
- Direservasi untuk penggunaan internal Google.49
- Direservasi untuk penggunaan internal Google.
Kode yang ditampilkan untuk perintah bazel build
, bazel test
:
1
- Build gagal.3
- Build OK, tetapi beberapa pengujian gagal atau waktu habis.4
- Build berhasil, tetapi pengujian tidak ditemukan meskipun pengujian diminta.
Untuk bazel run
:
1
- Build gagal.- Jika build berhasil, tetapi subproses yang dieksekusi menampilkan kode exit yang bukan nol, kode tersebut juga akan menjadi kode exit perintah.
Untuk bazel query
:
3
- Sebagian berhasil, tetapi kueri mengalami 1 atau beberapa error dalam kumpulan file BUILD input sehingga hasil operasi tidak 100% dapat diandalkan. Hal ini mungkin disebabkan oleh opsi--keep_going
di command line.7
- Kegagalan perintah.
Versi Bazel mendatang dapat menambahkan exit code lain, yang menggantikan kode keluar
kegagalan umum 1
dengan nilai selain nol yang berbeda, serta memiliki arti tertentu.
Namun, semua nilai keluar yang bukan nol akan selalu menimbulkan error.
Membaca file .bazelrc
Secara default, Bazel membaca file .bazelrc
dari direktori
workspace dasar atau direktori utama pengguna. Apakah hal ini
diinginkan atau tidak adalah pilihan untuk skrip Anda; jika skrip Anda harus
hermetis secara sempurna (seperti saat melakukan build rilis), Anda harus menonaktifkan pembacaan
file .bazelrc menggunakan opsi --bazelrc=/dev/null
. Jika Anda ingin melakukan
build menggunakan setelan pilihan pengguna, perilaku default akan lebih baik.
Log perintah
Output Bazel juga tersedia di file log perintah yang dapat Anda temukan dengan perintah berikut:
bazel info command_log
File log perintah berisi aliran stdout dan stderr yang diselingi dari
perintah Bazel terbaru. Perhatikan bahwa menjalankan bazel info
akan menimpa
konten file ini, karena file tersebut 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 diuraikan untuk banyak 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" dicetak atau tidak; pesan ini dapat diuraikan untuk
menemukan target yang berhasil dibuat, dan lokasi file
output yang dibuatnya. Pastikan untuk menentukan nilai n yang sangat besar jika Anda mengandalkan
pesan ini.
Memecahkan masalah performa dengan pembuatan profil
Lihat bagian Profiling Performa.