Anda dapat memanggil Bazel dari skrip untuk melakukan build, menjalankan pengujian, atau membuat kueri grafik dependensi. Bazel telah didesain untuk memungkinkan pembuatan skrip yang efektif, tetapi bagian ini mencantumkan beberapa detail yang perlu diingat 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, salah satunya adalah kunci yang melindungi dari mutasi serentak basis output oleh beberapa proses Bazel.
Memilih direktori basis output yang benar untuk skrip Anda 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 ingat bahwa setiap proses server Blaze dapat menangani paling banyak satu
pemanggilan dalam satu waktu.
Bergantung pada situasi Anda, mungkin masuk akal jika setiap instance skrip Anda menunggu gilirannya, atau mungkin masuk akal untuk menggunakan --output_base untuk menjalankan beberapa server Blaze dan menggunakannya.
Jika Anda menggunakan nilai basis output default, Anda akan bersaing untuk 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 melanjutkan.
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 aktif segera dimatikan.
Kode keluar apa yang akan saya dapatkan?
Bazel mencoba membedakan kegagalan karena kode sumber yang dipertimbangkan dari error eksternal yang mencegah Bazel berjalan 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 menghentikan dengan penonaktifan yang teratur.9- Kunci server ditahan dan--noblock_for_lockditeruskan.32- Kegagalan Lingkungan Eksternal tidak ada di komputer ini.33- Bazel kehabisan memori dan mengalami error. Anda harus mengubah command line.34- Dipesan untuk penggunaan internal Google.35- Dipesan untuk penggunaan internal Google.36- Masalah Lingkungan Lokal, diduga permanen.37- Pengecualian yang Tidak Ditangani / Error Bazel Internal.38- Error sementara saat memublikasikan hasil ke Layanan Peristiwa Build.39- Blob yang diperlukan oleh Bazel dikeluarkan dari Cache Jarak Jauh.41-44- Dipesan untuk penggunaan internal Google.45- Error persisten saat memublikasikan hasil ke Layanan Peristiwa Build.47- Dipesan untuk penggunaan internal Google.49- Dipesan untuk penggunaan internal Google.
Kode kembali 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 menampilkan kode keluar bukan nol, kode tersebut juga akan menjadi kode keluar perintah.
Untuk bazel query:
3- Berhasil sebagian, tetapi kueri mengalami 1 error atau lebih dalam kumpulan file BUILD input sehingga hasil operasi tidak 100% dapat diandalkan. Hal ini kemungkinan disebabkan oleh opsi--keep_goingdi command line.7- Perintah gagal.
Versi Bazel mendatang dapat menambahkan kode keluar tambahan, mengganti kode keluar kegagalan umum 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 .bazelrcdari direktori ruang kerja dasar
atau direktori beranda pengguna. Apakah hal ini diinginkan atau tidak adalah pilihan untuk skrip Anda; jika skrip Anda harus benar-benar hermetik (seperti saat melakukan build rilis), Anda harus menonaktifkan pembacaan file .bazelrc dengan menggunakan opsi --bazelrc=/dev/null. Jika Anda ingin melakukan build menggunakan setelan pilihan pengguna, perilaku default lebih baik.
Log perintah
Output Bazel juga tersedia dalam file log perintah yang dapat Anda temukan dengan perintah berikut:
bazel info command_logFile log perintah berisi aliran stdout dan stderr yang disisipkan dari perintah Bazel terbaru. Perhatikan bahwa menjalankan bazel info akan menimpa konten file ini, karena file 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 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 up-to-date" dicetak atau
tidak; pesan ini dapat diurai untuk
menemukan target mana yang berhasil dibuat, dan lokasi file output
yang dibuat. Pastikan untuk menentukan nilai n yang sangat besar jika Anda mengandalkan pesan ini.
Memecahkan masalah performa dengan pembuatan profil
Lihat bagian Pembuatan Profil Performa.