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

Sorun bildirin Kaynağı göster

Derleme gerçekleştirmek, test çalıştırmak veya bağımlılık grafiğini sorgulamak için komut dosyalarından Bazel'ı çağırabilirsiniz. Bazel, etkili komut dosyası oluşturmayı mümkün kılacak şekilde tasarlanmıştır. Ancak bu bölümde komut dosyalarınızı daha sağlam hale getirmek için aklınızda bulundurmanız gereken bazı ayrıntılara yer verilmiş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. Bunlardan biri, çıktı tabanının birden fazla Bazel işlemi tarafından eşzamanlı mutasyonuna karşı koruma sağlayan bir kilittir.

Komut dosyanız için doğru çıkış temel dizininin seçilmesi birkaç etkene bağlıdır. Derleme çıkışlarını belirli bir konuma yerleştirmeniz gerekiyorsa bu, kullanmanız gereken çıktı tabanını belirler. Bazel'a "salt okunur" bir çağrı yapıyorsanız (bazel query gibi) kilitleme faktörleri daha önemli olacaktır. Özellikle, komut dosyanızın birden fazla örneğini eşzamanlı olarak çalıştırmanız gerekiyorsa her birine farklı (veya rastgele) bir çıktı tabanı vermeniz gerekir.

Varsayılan çıkış temel değerini kullanırsanız kullanıcının etkileşimli Bazel komutları tarafından kullanılan aynı kilit için rekabet etmiş olursunuz. 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 modu hakkında notlar

Varsayılan olarak Bazel, optimizasyon olarak uzun süreli bir sunucu işlemi kullanır. Bazel'ı komut dosyasında çalıştırırken, sunucuyla işiniz bittiğinde shutdown öğesini çağırmayı unutmayın veya boştaki sunucuların derhal kapanması için --max_idle_secs=5 değerini belirtin.

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'in yürütülmesi aşağıdaki çıkış kodlarıyla sonuçlanabilir:

Tüm komutlarda ortak olan Çıkış Kodları:

  • 0 - Başarılı
  • 2 - Komut Satırı Sorunu, Kötü veya Geçersiz işaretler veya komut kombinasyonu ya da Kötü Ortam Değişkenleri. Komut satırınız değiştirilmelidir.
  • 8 - Derleme kesintiye uğradı ancak düzenli bir şekilde kapatma işlemiyle sonlandırıldı.
  • 9 - Sunucu kilidi korundu ve --noblock_for_lock geçildi.
  • 32 - Bu makinede Harici Ortam Hatası yok.

  • 33: Bellek kalmadığı için Bazel kilitlendi. Komut satırınızı değiştirmeniz gerekiyor.

  • 34 - Dahili Google 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 - Dahili Google kullanımı için ayrılmıştır.

  • 39: Bazel'in gerektirdiği Blob'lar, Uzak Önbellek'ten çıkarılır.

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

  • 45 - Sonuçlar Derleme Etkinliği Hizmeti'ne yayınlanırken hata oluştu.

  • 47 - Dahili Google 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ı olursa ancak yürütülen alt işlem sıfır olmayan bir çıkış kodu döndürürse bu da komutun çıkış kodu 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ış kodunu (1) belirli bir anlamı taşıyan, sıfır olmayan farklı bir değerle değiştirerek ilave çıkış kodları ekleyebilir. Ancak, sıfır olmayan tüm çıkış değerleri her zaman hata teşkil eder.

.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 istenmemesi, komut dosyanız için bir seçimdir. Komut dosyanızın tamamen hermetik olması gerekiyorsa (örneğin, 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 yeni Bazel komutunun araya eklemeli stdout ve stderr akışlarını içerir. bazel info çalıştırıldığında en yeni Bazel komutu olacağından bu dosyanın içeriklerinin ü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ük dosyasının konumu değişmez.

Çıkış ayrıştırılıyor

Bazel çıktısının birçok amaç doğrultusunda ayrıştırılması oldukça kolaydır. Komut dosyanız için yararlı olabilecek iki seçenek, ilerleme mesajlarını gizleyen --noshow_progress ve "güncellenmiş" mesajların yazdırılıp yazdırılmayacağını kontrol eden --show_result n şeklindedir. Bu mesajlar, hangi hedeflerin başarıyla oluşturulduğunu ve oluşturdukları çıkış dosyalarının konumunu keşfetmek 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 Profili Oluşturma bölümüne bakın.