Derleme yapmak, testleri çalıştırmak veya bağımlılık grafiğini sorgulamak için Bazel'i komut dosyalarından çağırabilirsiniz. Bazel, etkili komut dosyası oluşturmayı sağlayacak şekilde tasarlanmıştır ancak bu bölümde, komut dosyalarınızı daha sağlam hale getirmek için dikkat etmeniz gereken bazı ayrıntılar listelenmiştir.
Çıkış tabanını seçme
--output_base
seçeneği, Bazel işleminin bir derlemenin çıkışlarını nereye yazması gerektiğini ve Bazel tarafından dahili olarak kullanılan çeşitli çalışma dosyalarını kontrol eder. Bu dosyalardan biri, çıkış tabanının birden fazla Bazel işlemi tarafından eşzamanlı olarak değiştirilmesini önleyen bir kilittir.
Komut dosyanız için doğru çıkış temel dizinini seçmek çeşitli faktörlere bağlıdır. Derleme çıktılarını belirli bir konuma yerleştirmeniz gerekiyorsa bu, kullanmanız gereken çıktı tabanını belirler. Bazel'e "salt okunur" bir çağrı yapıyorsanız (ör. bazel query
), kilitleme faktörleri daha önemli olacaktır. Özellikle komut dosyanızın birden fazla örneğini aynı anda ç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 aynı kilidi kullanmak için yarışacaksınız. Kullanıcı, derleme gibi uzun süren komutlar verirse komutların tamamlanmasını beklemeniz gerekir.
Sunucu moduyla ilgili notlar
Bazel, varsayılan olarak optimizasyon amacıyla uzun süren bir sunucu işlemi kullanır. Bazel'i bir komut dosyasında çalıştırırken sunucuyla işiniz bittiğinde shutdown
işlevini çağırmayı veya --max_idle_secs=5
işlevini belirterek boşta kalan sunucuların kendilerini hemen kapatmasını sağlamayı unutmayın.
Hangi çıkış kodunu alacağım?
Bazel, dikkate alınan kaynak kodundan kaynaklanan hataları, Bazel'in düzgün şekilde yürütülmesini engelleyen harici hatalardan ayırmaya çalışır. Bazel yürütmesi aşağıdaki çıkış kodlarıyla sonuçlanabilir:
Tüm komutlarda ortak olan çıkış kodları:
0
- Başarılı2
- Command Line Problem, Bad or Illegal flags or command combination, or Bad Environment Variables. 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 tutuluyor ve--noblock_for_lock
geçildi.32
- External Environment Failure not on this machine.33
- Bazel'de bellek kalmadı ve kilitlendi. Komut satırınızı değiştirmeniz gerekir.34
: Google'ın kendi içinde kullanması için ayrılmıştır.35
: Google'ın kendi içinde kullanması için ayrılmıştır.36
- Yerel Çevre Sorunu, kalıcı olduğundan şüpheleniliyor.37
- İşlenmemiş İstisna / Dahili Bazel Hatası.38
: Google'ın kendi içinde kullanması için ayrılmıştır.39
- Bazel'in ihtiyaç duyduğu blob'lar uzak önbellekten çıkarılır.41-44
: Google'ın kendi içinde kullanması için ayrılmıştır.45
- Sonuçlar, Derleme Etkinliği Hizmeti'nde yayınlanırken hata oluştu.47
: Google'ın kendi içinde kullanması için ayrılmıştır.
bazel build
, bazel test
komutları için dönüş 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 istenmesine rağmen 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, komutun çıkış kodu da olur.
bazel query
için:
3
- Kısmi başarı. Sorgu, giriş BUILD dosyası grubunda 1 veya daha fazla hatayla karşılaştı. Bu nedenle, işlemin sonuçları %100 güvenilir değil. Bu durum büyük olasılıkla komut satırındaki--keep_going
seçeneğinden kaynaklanmaktadır.7
- Komut hatası.
Gelecekteki Bazel sürümlerinde ek çıkış kodları eklenebilir. Bu durumda, genel hata çıkış kodu 1
, belirli bir anlamı olan farklı bir sıfır olmayan değerle değiştirilir.
Ancak sıfır olmayan tüm çıkış değerleri her zaman hata olarak değerlendirilir.
.bazelrc dosyasını okuma
Bazel, varsayılan olarak .bazelrc
dosyasını temel çalışma alanı dizininden veya kullanıcının ana dizininden okur. Bunun istenip istenmediği, komut dosyanızın tercihine bağlıdır. Komut dosyanızın tamamen hermetik olması gerekiyorsa (ör. yayın derlemeleri yaparken) --bazelrc=/dev/null
seçeneğini kullanarak .bazelrc dosyasının okunmasını devre dışı bırakmalısınız. Kullanıcının tercih ettiği ayarları kullanarak derleme işlemi yapmak istiyorsanız varsayılan davranış daha uygundur.
Komut günlüğü
Bazel çıkışı, aşağıdaki komutla bulabileceğiniz bir komut günlük dosyasında da mevcuttur:
bazel info command_log
Komut günlük dosyası, en son Bazel komutunun iç içe geçmiş stdout ve stderr akışlarını içerir. bazel info
komutunun çalıştırılması, en son Bazel komutu olacağından bu dosyanın içeriğinin ü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üğü dosyasının konumu değişmez.
Ayrıştırma çıkışı
Bazel çıkışını birçok amaç için ayrıştırmak oldukça kolaydır. Komut dosyanız için faydalı olabilecek iki seçenek vardır: --noshow_progress
(ilerleme iletilerini bastırır) ve --show_result n
("güncel derleme" iletilerinin yazdırılıp yazdırılmayacağını kontrol eder). Bu iletiler, hangi hedeflerin başarıyla oluşturulduğunu ve oluşturulan çıkış dosyalarının konumunu bulmak için ayrıştırılabilir. Bu iletilere güveniyorsanız n için çok büyük bir değer belirttiğinizden emin olun.
Profillendirme ile performans sorunlarını giderme
Performans profili oluşturma bölümüne bakın.