Bu sayfa, özel derleme ve test kuralları yazan Bazel kullanıcıları için hazırlanmıştır bağlamında Bazel kurallarının şartlarını anlamak isteyen ele alacağız.
Uzaktan yürütme, Bazel'in veri merkezidir. Bazel, bir gRPC protokolü göz önünde bulunduruyoruz. Uzaktan yürütmeyi bazel-buildfarm, dağıtılmış bir uzaktan yürütme sağlamayı amaçlayan açık kaynak bir proje platformu.
Bu sayfa, farklı terimlerden bahsederken aşağıdaki terminolojiyi ortam türleri veya platformlar:
- Ana makine platformu: Bazel'in çalıştığı platform.
- Yürütme platformu - Bazel işlemlerinin çalıştırıldığı yer.
- Hedef platform: Derleme çıktılarının (ve bazı işlemlerin) çalıştırıldığı yerdir.
Genel Bakış
Uzaktan yürütme için Bazel derlemesini yapılandırırken ve derlemenin uzaktan yürütülmesini sağlamak için bu sayfada açıklanan yönergeleri hatasız olması. Bunun nedeni uzaktan yürütmenin doğası gereğidir:
yalıtılmış derleme işlemleri. Derleme araçları durum ve bağımlılıkları korumaz emin olun.
Çeşitli yürütme ortamları. Yerel derleme yapılandırması her zaman ortamları için uygun olduğunu unutmayın.
Bu sayfada, özel Bazel uygulanırken ortaya çıkabilecek sorunlar açıklanmaktadır derleme ve test etme kuralları hakkında bilgi edindiniz. Kapsam şu konular:
- Araç zinciri kurallarıyla derleme araçlarını çağırma
- Dolaylı bağımlılıkları yönetme
- Platforma bağlı ikili programları yönetme
- Yapılandırma stili WORKSPACE kurallarını yönetme
Araç zinciri kurallarıyla derleme araçlarını çağırma
Bazel araç zinciri kuralı, derleme kuralına
derleyiciler ve bağlayıcılar gibi belirli araçların kullanılması ve bunların nasıl yapılandırılacağı
(kuralın oluşturucusu tarafından tanımlanan parametreler kullanılarak) Araç zinciri kuralı, derlemeye olanak tanır
ve test kuralları oluşturarak derleme araçlarını tahmin edilebilir, önceden yapılandırılmış bir şekilde çağırmak
için de geçerlidir. Örneğin, bir araç zinciri kuralı kullanın.
PATH
, JAVA_HOME
veya diğer yerel sağlayıcılardan derleme araçlarını çağırmak yerine
uzaktan kumandada eşdeğer değerlere (veya hiç) ayarlanamayan değişkenler
yürütme ortamı sağlar.
Şu anda aşağıdakiler için Bazel derleme ve test kurallarında mevcut olan araç zinciri kuralları: Scala, Pas, ve Git, başka diller ve araçlar için de yeni araç zinciri kuralları yürürlükte olan bash olarak değiştirin. Kuralınızın kullandığı araç için bir araç zinciri kuralı yoksa şunları yapabilirsiniz: bir araç zinciri kuralı oluşturun.
Dolaylı bağımlılıkları yönetme
Derleme aracı, derleme işlemlerindeki bağımlılıklara erişebiliyorsa bu işlemler her uzaktan derleme işlemi yürütüldüğü için uzaktan yürütüldüğünde başarısız olur ayrı olarak ele alacağız. Bazı derleme araçları, derleme işlemleri ve araca açıkça dahil edilmeyen erişim bağımlılıkları çağrılmasını sağlayın. Bu durum, uzaktan gerçekleştirilen derleme işlemlerinin başarısız olmasına neden olur.
Örneğin, Bazel durum bilgili bir derleyiciye yerel olarak foo derlemesi talimatını verdiğinde, derleyici, foo'un derleme çıkışlarına yapılan referansları korur. Bazel ardından derleyiciye, foo değerine bağlı olan bar komutunu derlemesi talimatını verir. BUILD dosyasında, çağrısı yapıldığında, işlem aynı olduğu sürece derleyici örneği, her iki işlem için de yürütülür (yerel yürütmede olduğu gibi). Ancak uzaktan yürütme senaryosunda her derleme işlemi bir derleyici örneğini, derleyici durumunu ve bar öğesinin foo kaybedilir ve derleme başarısız olur.
Bazel 0.14.1, bu bağımlılık sorunlarının tespit edilip ortadan kaldırılmasına yardımcı olmak için Bağımlılıklar için uzaktan kumanda ile aynı kısıtlamalara sahip yerel Docker korumalı alanı çok önemlidir. Korumalı alanı kullanarak derlemenizi uzaktan yürütmeye hazırlamak için ve bağımlılıkla ilgili yapı hatalarını belirleyip çözmeye yardımcı olur. Docker Korumalı Alanı ile Bazel Uzaktan Yürütme Sorunlarını Giderme başlıklı makaleyi inceleyin konulu videomuzu izleyin.
Platforma bağlı ikili programları yönetme
Genellikle, ana makine platformunda derlenen bir ikili program, olası bağımlılıklar nedeniyle rastgele uzaktan yürütme platformununa alın. Örneğin, Bazel ile sağlanan SingleJar ikili programı ana makine platformunu hedefler. Ancak, uzaktan yürütme için SingleJar'ın işlemin bir parçası olarak derlenmesi gerekir. uzaktan yürütme platformunu hedefleyecek şekilde yapılandırmalısınız. (Daha fazla bilgi için hedef seçim mantığı.)
Derlemeniz için gereken derleme araçlarının ikili programlarını kaynak kodunuzla göndermeyin komut dosyalarının yürütme platformunuzda güvenli bir şekilde çalıştığından emin değilseniz. Bunun yerine şunlardan biri:
Aracın uyumlu olmasını sağlamak için aracın kaynak koduna gönderin veya harici olarak referans verin. geliştirmeyi öğreneceksiniz.
Aracı uzaktan yürütme ortamına önceden yükleyin (örneğin, araç zinciri kapsayıcısı) yeterince kararlıysa ve çalıştırmak için araç zinciri kurallarını kullanabilirsiniz.
Yapılandırma stili WORKSPACE kurallarını yönetme
Araçlar için ana makine platformunu araştırmak amacıyla Bazel'ın WORKSPACE
kuralları kullanılabilir
ve kütüphaneleri de içerir. Yerel derlemeler için Bazel'ın
yürütme platformu. Derleme açıkça yerel derleme araçlarına ve
uzaktan yürütme platformu tarafından çalıştırılabiliyorsa uzaktan yürütme
ana makine platformuyla aynı değildir.
WORKSPACE
kuralları tarafından gerçekleştirilen aşağıdaki işlemler uyumlu değil
uzaktan yürütme:
İkili programlar oluşturma.
WORKSPACE
kuralda derleme işlemleri yürütülüyor uzaktan yürütme platformuyla uyumlu olmayan ikili programlara neden olur ana makine platformundan farklıysa.pip
paket yükleniyor.WORKSPACE
üzerindenpip
paket yüklendi kuralları, bağımlılıklarının ana makine platformuna önceden yüklenmesini gerektirir. Ana makine platformu için özel olarak derlenen bu paketler, ana makineden farklıysa uzaktan yürütme platformuyla uyumlu değil platformu.Yerel araçlara veya yapılara sembolik bağlantı. Araçların veya kütüphanelerin sembol bağlantıları
WORKSPACE
kuralları aracılığıyla oluşturulan ana makine platformunda yüklü olduğu için başarısız olacaktır. Bunun nedeni, Bazel’in yerini belirleyebilir. Bunun yerine, standart derleme işlemlerini kullanarak sembolik bağlantılar oluşturun. sembolik araçlara ve kitaplıklara Bazel'inrunfiles
bağlantısından erişilebilir. ağacı.repository_ctx.symlink
etiketini kullanma kullanarak, harici depo dizininin dışındaki hedef dosyaları temsil eder.Ana makine platformu değiştiriliyor. Bazel dışında dosya oluşturmayın
runfiles
ağacı, ortam değişkenleri oluşturma ve benzer işlemleri uzaktan yürütme platformunda beklenmedik davranışlar sergileyebilirler.
Olası hermetik olmayan davranışları bulmanıza yardımcı olması için Workspace kuralları günlüğünü kullanabilirsiniz.
Bir dış bağımlılık, ana makineye bağlı belirli işlemler yürütüyorsa
bu işlemleri WORKSPACE
arasında bölüştürmeniz ve
şu şekilde çalışır:
Platform denetimi ve bağımlılık numaralandırma. Bu işlemler,
WORKSPACE
kuralları aracılığıyla yerel olarak yürütülebilir. Bu kurallar, kitaplığının yüklenmesi, oluşturulması gereken paketleri indirme ve derlemek için gereken yapı taşlarını oluşturur. Uzaktan yürütme için bu kurallar yeniden kontrol edilmiş yapıların kullanılmasını da destekler, böylece gibi veriler, normalde ana makine platformu incelemesi sırasında elde edilir. Önceden işaretlenmiş yapıları, Bazel’in bağımlılıkları yerelmiş gibi tanımlamasına olanak tanır. Tekliflerinizi otomatikleştirmek ve optimize etmek için koşullu ifadeleri veya bunun için--override_repository
işaretini kullanın.Hedefe özel yapılar ve platform değişimi oluşturma veya derleme. Bu işlemler, normal derleme kuralları aracılığıyla yürütülmelidir. Eylemler dış bağımlılıklar için hedefe özgü yapılar üretmesi gerekiyorsa yardımcı oluyorum.
Uzaktan yürütme amacıyla önceden kontrol edilmiş yapıları daha kolay bir şekilde oluşturmak için
Oluşturulan dosyaları yayınlamak için WORKSPACE
kural. Bu kuralları, oluşturduğunuz her yeni
örneğin her araç zinciri container'ının içinde olup olmadığını kontrol edin ve
derleme işlemini referans olarak kaynak deponuza ekleyin.
Örneğin, cuda
için Tensorflow kurallarında
ve python
,
WORKSPACE
kuralları aşağıdaki BUILD files
değerini oluşturur.
Yerel yürütme için ana makine ortamı kontrol edilerek oluşturulan dosyalar kullanılır.
Uzaktan yürütme için koşullu beyan
kuralının, giriş yapılan dosyaları kullanmasına izin verir.
buyle ilgili daha fazla bilgi edinin.
BUILD
dosyalarında genrules
belirtilmiş
yerel olarak ve uzaktan çalışabilen ve gerekli işlemleri gerçekleştirebilen
burada gösterildiği gibi daha önce repository_ctx.symlink
üzerinden yapılan işlem.