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ılmak için 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ı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ı nereye yazacağını belirler. Bu dosyalardan biri, birden fazla Bazel işlemi tarafından çıkış tabanında eşzamanlı bir değişikliğe karşı koruma sağlayan bir kilittir.
Komut dosyanız için doğru çıktı tabanı dizinini seçme birkaç faktöre bağlıdır. Derleme çıkışlarını belirli bir konuma yerleştirmeniz gerekirse bu, kullanmanız gereken çıktı tabanını belirtir. Bazel'a (
bazel query gibi) "salt okunur" bir çağrı yapıyorsanız kilitleme faktörleri daha önemli olacaktır. Özellikle, komut dosyanızın birden fazla örneğini aynı anda çalıştırmanız gerekiyorsa her Blaze sunucusu işleminin aynı anda en fazla bir çağrıyı işleyebileceğini unutmamanız gerekir.
Durumunuza bağlı olarak, komut dosyanızın her bir örneğinin sırayı beklemesi veya
--output_base kullanarak birden fazla Blaze sunucusu çalıştırıp bunları kullanmak mantıklı olabilir.
Varsayılan çıkış taban değerini kullanırsanız kullanıcının etkileşimli Bazel komutları tarafından kullanılan kilit için rekabet edersiniz. Kullanıcı, derlemeler gibi uzun süreli komutlar yayınlarsa komut dosyanızın devam edebilmesi için bu komutların tamamlanmasını beklemesi gerekir.
Sunucu moduyla ilgili notlar
Varsayılan olarak Bazel, optimizasyon için uzun süren bir sunucu işlemi kullanır. Bazel'ı bir komut dosyasında çalıştırırken sunucuyla işiniz bittiğinde
shutdown yöntemini çağırmayı veya boştaki sunucuların kendilerini hemen kapatması için
--max_idle_secs=5 değerini belirtmeyi unutmayın.
Hangi çıkış kodunu alacağım?
Bazel, kaynak kodundan kaynaklanan hataları Bazel'ın düzgün bir şekilde yürütülmesini engelleyen harici hatalardan ayırt etmeye çalışır. Bazel'ın çalıştırılması aşağıdaki çıkış kodlarına neden olabilir:
Tüm komutlarda ortak kullanılan çıkış kodları:
0- Başarılı
2- Komut Satırı Sorunu, Kötü veya Yasa Dışı 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 kapatma işlemiyle sonlandırıldı.
9- Sunucu kilidi korundu ve
--noblock_for_lockgeçildi.
32: Bu makinede Harici Ortam Hatası.
33: Bazel'ın belleği kalmamış ve kilitlendi. Komut satırınızı değiştirmeniz gerekiyor.
34: Google şirket içi kullanımı için ayrılmıştır.
35: Google şirket içi kullanımı için ayrılmıştır.
36- Yerel Çevre Sorunu, kalıcı olduğundan şüpheleniliyor.
37- İşlenmemiş İstisna / Dahili Bazel Hatası.
38- Sonuçlar Derleme Etkinliği Hizmeti'nde yayınlanırken geçici hata oluştu.
39: Bazel'ın gerektirdiği blob'lar Uzak Önbellek'ten çıkarılır.
41-44: Google şirket içi kullanımı için ayrılmıştır.
45- Sonuçları Derleme Etkinliği Hizmeti'ne yayınlarken kalıcı hata oluştu.
47: Google şirket içi kullanımı için ayrılmıştır.
49: Google şirket içi kullanımı 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 tamamlandı, ancak bazı testler başarısız oldu veya zaman aşımına uğradı.
4- Derleme başarılı ancak test istendiği halde hiç 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ılı oldu, ancak sorgu giriş DERLEME dosyası kümesinde 1 veya daha fazla hatayla karşılaştı ve bu nedenle işlemin sonuçları %100 güvenilir değil. Bunun nedeni muhtemelen komut satırındaki
--keep_goingseçeneğidir.
7- Komut hatası.
Gelecekteki Bazel sürümleri, genel hata çıkış kodu
1 yerine belirli bir anlamı olan, sıfır olmayan farklı bir değerle ek çıkış kodları ekleyebilir.
Bununla birlikte, sıfır olmayan tüm çıkış değerleri her zaman bir hata teşkil eder.
.bazelrc dosyasını okuma
Varsayılan olarak Bazel,
.bazelrc dosyasını temel çalışma alanı dizininden veya kullanıcının ana dizininden okur. Komut dosyanızın bu tercihli olup olmamasından bağımsız olarak, komut dosyanızın mükemmel bir şekilde 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 istiyorsanız varsayılan davranış daha iyidir.
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 araya eklemeli stdout ve stderr akışlarını içerir. Bu komut en son Bazel komutu olacağından
bazel info komutunun çalıştırıldığında bu dosyanın içeriğinin üzerine yazılacağını unutmayın.
Bununla birlikte,
--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ı birçok amaç için kolayca ayrıştırılabilir. Komut dosyanız için yararlı olabilecek iki seçenek, ilerleme mesajlarını gizleyen
--noshow_progress ve "güncel" mesajlarının yazdırılıp yazdırılmayacağını kontrol eden
--show_result n'dir. 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 mesajlardan yararlanıyorsanız çok büyük bir n değeri belirttiğinizden emin olun.
Profil oluşturarak performans sorunlarını giderme
Performans Profili Oluşturma bölümünü inceleyin.