Derleme yapmak, test çalıştırmak veya bağımlılık grafiğini sorgulamak için komut dosyalarından Bazel'i çağırabilirsiniz. Bazel, etkili komut dosyası oluşturmayı mümkün kılacak şekilde tasarlanmıştır. Ancak bu bölümde komut dosyalarınızın daha güçlü hale getirilmesi için aklınızda bulundurmanız gereken bazı ayrıntılara yer verilmiştir.
Çıkış tabanını seçme
--output_base
seçeneği, Bazel sürecinin bir derlemenin çıktılarını nereye yazması gerektiğini ve Bazel tarafından dahili olarak kullanılan çeşitli çalışma dosyalarını (bunlardan biri, çıkış tabanının birden fazla Bazel süreci tarafından eşzamanlı olarak mutasyona uğramasına karşı koruma sağlayan bir kilittir) kontrol eder.
Komut dosyanız için doğru çıkış temel dizininin seçilmesi birkaç etkene bağlıdır. Derleme çıktılarını belirli bir konuma yerleştirmeniz gerekiyorsa kullanmanız gereken çıkış tabanını bu durum belirler. Bazel'a "salt okunur" bir çağrı yapıyorsanız (bazel query
gibi) kilitleme faktörleri daha önemli olacaktır. Özellikle, komut dosyanızı birden fazla örneğini eşzamanlı olarak çalıştırmanız gerekiyorsa her birine farklı (veya rastgele) bir çıkış tabanı vermeniz gerekir.
Varsayılan çıkış taban değerini kullanırsanız kullanıcının etkileşimli Bazel komutları tarafından kullanılan kilitle rekabet edersiniz. Kullanıcı, derleme gibi uzun süren komutlar gönderirse komut dosyanızı devam ettirebilmek için bu komutların tamamlanmasını beklemesi gerekir.
Sunucu modu hakkında notlar
Bazel, optimizasyon olarak varsayılan olarak uzun süre çalışan bir sunucu işlemi kullanır. Bazel'i bir komut dosyasında çalıştırırken, sunucuyla işiniz bittiğinde shutdown
çağırmayı veya boştaki sunucuların hemen kapanması için --max_idle_secs=5
belirtmeyi unutmayın.
Hangi çıkış kodunu alacağım?
Bazel, ele alınan kaynak koddan kaynaklanan hataları, Bazel'in düzgün şekilde çalışmasını engelleyen harici hatalardan ayırt etmeye çalışır. Bazel'in yürütülmesi aşağıdaki çıkış kodlarıyla sonuçlanabilir:
Tüm komutlarda ortak olan Çıkış Kodları:
0
- Başarılı2
: Komut satırı sorunu, Hatalı veya yasa dışı işaretler ya da komut kombinasyonu veya Hatalı ortam değişkenleri. Komut satırınız değiştirilmelidir.8
- Derleme kesintiye uğradı ancak düzenli bir kapatma işlemiyle sonlandırıldı.9
- Sunucu kilidi korundu ve--noblock_for_lock
geçildi.32
- Bu makinede Harici Ortam Hatası yok.33
: Bazel'de bellek yetersizliği nedeniyle kilitlenme meydana geldi. Komut satırınızı değiştirmeniz gerekiyor.34
- Dahili Google kullanımı için ayrılmıştır.35
: Google'ın dahili kullanımı için ayrılmıştır.36
- Yerel çevresel sorun, kalıcı olduğu düşünülüyor.37
- İşlenmemiş İstisna / Dahili Bazel Hatası.38
: Google'ın dahili kullanımı için ayrılmıştır.39
: Bazel'in gerektirdiği Blob'lar, Uzak Önbellek'ten çıkarılır.41-44
- Dahili Google kullanımı için ayrılmıştır.45
: Derleme Etkinliği Hizmeti'nde sonuçlar yayınlanırken hata oluştu.47
: Google'ın dahili kullanımı için ayrılmıştır.
bazel build
ve bazel test
komutları için döndürülen kodlar:
1
- Derleme başarısız oldu.3
- Derleme başarılı ancak bazı testler başarısız oldu veya zaman aşımına uğradı.4
: Derleme başarılı ancak test istendiyse bile test bulunamadı.
bazel run
için:
1
: Derleme başarısız oldu.- Derleme başarılı olursa ancak yürütülen alt işlem sıfır olmayan bir çıkış kodu döndürürse bu da komutun çıkış kodu olur.
bazel query
için:
3
- Kısmi başarı, ancak sorgu giriş BUILD dosyası kümesinde 1 veya daha fazla hatayla karşılaştı. Bu nedenle işlem sonuçları %100 güvenilir değil. Bunun nedeni büyük olasılıkla komut satırındaki bir--keep_going
seçeneğidir.7
: Komut hatası.
Gelecekteki Bazel sürümleri, genel hata çıkış kodunu (1
) belirli bir anlamı taşıyan, sıfır olmayan farklı bir değerle değiştirerek ilave çıkış kodları ekleyebilir.
Ancak, sıfır olmayan tüm çıkış değerleri her zaman hata teşkil eder.
.bazelrc dosyasını okuma
Bazel varsayılan olarak .bazelrc
dosyasını ana çalışma alanı dizininden veya kullanıcının ana dizininden okur. Bu işlemin istenip istenmediği, komut dosyanız için bir seçimdir. Komut dosyanızın tamamen kapalı olması gerekiyorsa (ör. sürüm derlemeleri yaparken) --bazelrc=/dev/null
seçeneğini kullanarak .bazelrc dosyasının okunmasını devre dışı bırakmanız gerekir. Kullanıcının tercih ettiği ayarları kullanarak derleme yapmak istiyorsanız varsayılan davranış daha iyidir.
Komut günlüğü
Bazel çıkışı, aşağıdaki komutla bulabileceğiniz bir komut günlüğü dosyasında da mevcuttur:
bazel info command_log
Komut günlük dosyası, en son Bazel komutunun iç içe yerleştirilmiş stdout ve stderr akışlarını içerir. bazel info
çalıştırıldığında en yeni Bazel komutu olacağından bu dosyanın içeriklerinin üzerine yazılacağını unutmayın.
Ancak, --output_base
veya --output_user_root
seçeneklerinin ayarını değiştirmediğiniz sürece komut günlük dosyasının konumu değişmez.
Çıkış ayrıştırılıyor
Bazel çıktısının birçok amaç doğrultusunda ayrıştırılması oldukça kolaydır. Komut dosyanız için yararlı olabilecek iki seçenek vardır: İlerleme mesajlarını bastıran --noshow_progress
ve "güncel derleme" mesajlarının yazdırılıp yazdırılmayacağını kontrol eden --show_result n
. Bu mesajlar, hangi hedeflerin başarıyla derlendiğini ve oluşturdukları çıkış dosyalarının konumunu bulmak için ayrıştırılabilir. Bu iletilere güveniyorsanız çok büyük bir n değeri belirttiğinizden emin olun.
Profil oluşturarak performans sorunlarını giderme
Performans Profilleme bölümüne bakın.