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

Sorun bildirme Kaynağı görüntüleme Nightly · 8.0 7.4 . 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 bu bölümde, komut dosyalarınızı daha sağlam hale getirmek için göz önünde bulundurmanız gereken bazı ayrıntılar listelenmiştir.

Çıkış tabanını seçme

--output_base seçeneği, Bazel sürecinin bir derlemenin çıktılarını nereye yazacağını 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ı eşzamanlı olarak birden fazla kez çalıştırmanız gerekiyorsa her Blaze sunucu işleminin tek seferde en fazla bir çağrıyı işleyebileceğini unutmayın. Durumunuza bağlı olarak, komut dosyanızın her örneğinin sırasını beklemesi veya birden fazla Blaze sunucusu çalıştırmak ve bunları kullanmak için --output_base'ü kullanmanız uygun olabilir.

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

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 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 tutulur ve --noblock_for_lock iletilir.
  • 32 - Bu makinede harici ortam hatası yok.

  • 33: Bazel'de bellek yetersizliği nedeniyle kilitlenme yaşandı. Komut satırınızı değiştirmeniz gerekir.

  • 34: Google'ın dahili 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: Derleme Etkinliği Hizmeti'ne sonuç yayınlarken geçici hata.

  • 39: Bazel tarafından gereken blob'lar uzak önbellekten çıkarılır.

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

  • 45: Derleme Etkinliği Hizmeti'ne sonuç yayınlarken sürekli hata.

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

  • 49: 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ı olur ancak yürütülen alt süreç sıfır olmayan bir çıkış kodu döndürür. Bu kod, komutun çıkış kodu olur.

bazel query için:

  • 3: Kısmi başarı. Ancak sorgu, giriş BUILD dosya grubunda 1 veya daha fazla hatayla karşılaştı. Bu nedenle, işlemin sonuçları %100 güvenilir değildir. 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 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 son Bazel komutu haline geldiği 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 n için çok büyük bir değer belirttiğinizden emin olun.

Profil oluşturarak performans sorunlarını giderme

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