Komut dosyalarından Bazel çağrılıyor

7.3 · 7.2 · 7.1 · 7.0 · 6.5

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ı sağlamak için tasarlanmıştır ancak komut dosyalarınızı daha sağlam hale getirmek için göz önünde bulundurmanız gereken bazı ayrıntılar bu bölümde listelenmiş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ış ana dizini seçimi çeşitli faktörlere bağlıdır. Derleme çıktılarını belirli bir konuma yerleştirmeniz gerekiyorsa kullanmanız gereken çıkış tabanını bu durum belirler. Bazel'e "salt okunur" çağrı yapıyorsanız (bazel query gibi) kilitleme faktörleri daha önemlidir. Özellikle, komut dosyanızın 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 moduyla ilgili notlar

Varsayılan olarak Bazel, optimizasyon olarak uzun süreli 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, kaynak kodun Bazel'in doğru şekilde yürütülmesini engelleyen harici hatalardan kaynaklanması nedeniyle yapılan hataları ayırt etmeye çalışır. Bazel yürütme 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 gerekir.

  • 34: Google'ın dahili kullanımı için ayrılmıştır.

  • 35 - Dahili Google kullanımı için ayrılmıştır.

  • 36 - Yerel çevre sorunu. Kalıcı olabilir.

  • 37 - İşlenmemiş İstisna / Dahili Bazel Hatası.

  • 38: Google'ın dahili kullanımı için ayrılmıştı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 - Dahili Google 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ı olur ancak yürütülen alt süreç sıfır olmayan bir çıkış kodu döndürürse bu kod, komutun çıkış kodu da 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ış kodu 1'ü belirli bir anlamı olan sıfır olmayan farklı bir değerle değiştirerek ek çıkış kodları ekleyebilir. Ancak sıfır olmayan tüm çıkış değerleri her zaman hata oluşturur.

.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 bir derleme gerçekleştirmek isterseniz varsayılan davranış daha iyidir.

Komut günlüğü

Bazel çıkışı, aşağıdaki komutla bulabileceğiniz komut günlük 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 son Bazel komutu olduğu için 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.

Çıkışı ayrıştırma

Bazel çıkışının birçok amaç için 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 çıkarma ile performans sorunlarını giderme

Performans Profilleme bölümüne bakın.