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

Sorun bildir Kaynağı görüntüle Nightly · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

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.