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

Sorun bildir Kaynağı görüntüleyin Nightly · 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 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ı 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üreli komutlar verirse komut dosyanızın devam edebilmesi 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, 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: Bellek kalmadığı için Bazel kilitlendi. 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 çevre sorunu. Kalıcı olabilir.

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

  • 38: Derleme Etkinliği Hizmeti'ne sonuç yayınlarken geçici hata.

  • 39: Bazel'in gerektirdiği Blob'lar, Uzak Önbellek'ten çı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, bazel test komutlarının 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 hiçbir 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 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 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 iletilerden yararlanıyorsanız n değerini çok büyük bir değer olarak belirtmeyi unutmayın.

Profil oluşturarak performans sorunlarını giderme

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