Bu sayfa, uzaktan yürütme bağlamında Bazel kurallarıyla ilgili şartları anlamak isteyen, özel derleme ve test kuralları yazan Bazel kullanıcıları için hazırlanmıştır.
Uzaktan yürütme, Bazel'in veri merkezi gibi ayrı bir platformda işlemler yürütmesine olanak tanır. Bazel, uzaktan yürütme için gRPC protokolünü kullanır. Dağıtılmış bir uzak yürütme platformu sunmayı amaçlayan açık kaynak bir proje olan bazel-buildfarm ile uzak yürütmeyi deneyebilirsiniz.
Bu sayfada, farklı ortam türleri veya platformlar söz konusu olduğunda aşağıdaki terminoloji kullanılır:
- Barındırma platformu: Bazel'in çalıştığı platform.
- Yürütme platformu: Bazel işlemlerinin yürütüldüğü platform.
- Hedef platform: Derleme çıktılarının (ve bazı işlemlerin) çalıştırıldığı platform.
Genel Bakış
Bir Bazel derlemesini uzaktan yürütme için yapılandırırken, derlemenin uzaktan hatasız şekilde yürütülmesini sağlamak için bu sayfada açıklanan yönergeleri uygulamanız gerekir. Bunun nedeni, uzaktan yürütmenin doğası gereğidir. Örneğin:
Bağımsız derleme işlemleri. Derleme araçları durumu korumaz ve bağımlılıklar aralarında sızamaz.
Çeşitli yürütme ortamları. Yerel derleme yapılandırması her zaman uzaktan yürütme ortamları için uygun değildir.
Bu sayfada, uzaktan yürütme için özel Bazel derleme ve test kuralları uygulanırken ortaya çıkabilecek sorunlar ve bu sorunların nasıl önleneceği açıklanmaktadır. Aşağıdaki konular ele alınmıştır:
- Araç seti kuralları aracılığıyla derleme araçlarını çağırma
- Örtülü bağımlılıkları yönetme
- Platforma bağımlı ikili dosyaları yönetme
- Yapılandırma stilindeki WORKSPACE kurallarını yönetme
Araç zinciri kuralları aracılığıyla derleme araçlarını çağırma
Bazel araç zinciri kuralı, bir derleme kuralına derleyici ve bağlayıcı gibi hangi derleme araçlarının kullanılacağını ve kuralın oluşturucusu tarafından tanımlanan parametreler kullanılarak bunların nasıl yapılandırılacağını söyleyen bir yapılandırma sağlayıcısıdır. Araç zinciri kuralı, derleme ve test kurallarının derleme araçlarını uzaktan yürütmeyle uyumlu, tahmin edilebilir ve önceden yapılandırılmış bir şekilde çağırmasına olanak tanır. Örneğin, derleme araçlarını PATH
, JAVA_HOME
veya uzak yürütme ortamında eşdeğer değerlere ayarlanmamış (veya hiç ayarlanmamış) olabilecek diğer yerel değişkenler aracılığıyla çağırmak yerine bir araç zinciri kuralı kullanın.
Şu anda Scala, Rust ve Go için Bazel derleme ve test kurallarına yönelik araç zinciri kuralları mevcuttur. bash gibi diğer diller ve araçlar için yeni araç zinciri kuralları üzerinde çalışılıyor. Kuralınızın kullandığı araç için bir araç zinciri kuralı yoksa araç zinciri kuralı oluşturabilirsiniz.
Örtük bağımlılıkları yönetme
Bir derleme aracı, derleme işlemleri genelindeki bağımlılıklara erişebiliyorsa her uzaktan derleme işlemi diğerlerinden ayrı olarak yürütüldüğü için bu işlemler uzaktan yürütüldüğünde başarısız olur. Bazı derleme araçları, derleme işlemleri arasında durumu korur ve araç çağrısına açıkça dahil edilmemiş bağımlılıklara erişir. Bu da uzaktan yürütülen derleme işlemlerinin başarısız olmasına neden olur.
Örneğin, Bazel bir durum bilgisine sahip derleyiciye foo'yu yerel olarak derlemesi talimatını verdiğinde derleyici, foo'nun derleme çıkışlarına yönelik referansları korur. Bazel daha sonra derleyiciye, derleyici çağrısına dahil edilmek üzere BUILD dosyasında bu bağımlılığı açıkça belirtmeden foo'ya bağlı bar dosyasını derlemesi talimatını verdiğinde, aynı derleyici örneği her iki işlem için de yürütüldüğü sürece (yerel yürütme için tipik olduğu gibi) işlem başarılı bir şekilde yürütülür. Ancak uzaktan yürütme senaryosundaki her derleme işlemi ayrı bir derleyici örneği yürüttüğünden, derleyici durumu ve bar'ın foo'ya olan gizli bağımlılığı kaybedilir ve derleme başarısız olur.
Bu bağımlılık sorunlarını tespit edip ortadan kaldırmaya yardımcı olmak için Bazel 0.14.1, uzaktan yürütmeyle aynı bağımlılık kısıtlamalarına sahip yerel Docker korumalı alanını sunar. Bağımlılıkla ilgili derleme hatalarını tespit edip çözerek derlemenizi uzaktan yürütmeye hazırlamak için korumalı alanı kullanın. Daha fazla bilgi için Docker korumalı alanı ile Bazel uzaktan yürütmeyle ilgili sorunları giderme başlıklı makaleyi inceleyin.
Platforma bağımlı ikili dosyaları yönetme
Genellikle, ana makine platformunda oluşturulan bir ikili program, olası uyuşmazlıklar nedeniyle rastgele bir uzaktan yürütme platformunda güvenli bir şekilde yürütülemez. Örneğin, Bazel ile birlikte sağlanan SingleJar ikili dosyası, barındırma platformunu hedefler. Ancak uzaktan yürütme için SingleJar, uzaktan yürütme platformunu hedeflemesi amacıyla kodunuzu derleme işleminin bir parçası olarak derlenmelidir. (Hedef seçim mantığına bakın.)
Derlemeniz için gereken derleme araçlarının ikili dosyalarını, yürütme platformunuzda güvenli bir şekilde çalıştıklarından emin olmadığınız sürece kaynak kodunuzla birlikte göndermeyin. Bunun yerine aşağıdakilerden birini yapın:
Uzaktan yürütme platformu için derlenebilmesi amacıyla aracın kaynak kodunu gönderin veya harici olarak referans verin.
Yeterince kararlıysa aracı uzaktan yürütme ortamına (örneğin, bir araç zinciri kapsayıcısı) önceden yükleyin ve derlemenizde çalıştırmak için araç zinciri kurallarını kullanın.
Yapılandırma stilindeki WORKSPACE kurallarını yönetme
Bazel'in WORKSPACE
kuralları, derlemenin gerektirdiği araçlar ve kitaplıklar için ana makine platformunu araştırmak amacıyla kullanılabilir. Bu platform, yerel derlemelerde Bazel'in yürütme platformu da olur. Derleme yerel derleme araçlarına ve yapılarına açıkça bağlıysa uzaktan yürütme platformu ana makine platformuyla aynı değilse uzaktan yürütme sırasında hata meydana gelir.
WORKSPACE
kuralları tarafından gerçekleştirilen aşağıdaki işlemler uzaktan yürütmeyle uyumlu değildir:
İkili program oluşturma.
WORKSPACE
kurallarında derleme işlemlerinin yürütülmesi, ana makine platformundan farklıysa uzaktan yürütme platformuyla uyumlu olmayan ikili dosyalar oluşturur.pip
paketlerini yükleme.WORKSPACE
kuralları aracılığıyla yüklenenpip
paketlerinin bağımlılıklarının ana platforma önceden yüklenmiş olması gerekir. Özellikle barındırma platformu için oluşturulan bu paketler, barındırma platformundan farklıysa uzaktan yürütme platformuyla uyumlu olmaz.Yerel araçlara veya yapıya simge bağlantısı oluşturma.
WORKSPACE
kuralları aracılığıyla oluşturulan ana makine platformuna yüklenen araçlara veya kitaplıklara yönelik simge bağlantıları, Bazel bunları bulamayacağı için derlemenin uzaktan yürütme platformunda başarısız olmasına neden olur. Bunun yerine, standart derleme işlemlerini kullanarak sembolik bağlantılar oluşturun. Böylece, sembolik bağlantı verilen araçlara ve kitaplıklara Bazel'inrunfiles
ağacından erişilebilir. Hedef dosyaları harici depo dizininin dışındaki bir dizinle simge bağlantısı oluşturmak içinrepository_ctx.symlink
kullanmayın.Ana makine platformunda değişiklik yapma. Bazel
runfiles
ağacının dışında dosya oluşturmaktan, ortam değişkenleri oluşturmaktan ve uzak yürütme platformunda beklenmedik şekilde davranabilecek benzer işlemlerden kaçının.
Olası hermetik olmayan davranışları bulmak için Workspace kuralları günlüğünü kullanabilirsiniz.
Harici bir bağımlılık, barındıran platforma bağlı belirli işlemleri yürütüyorsa bu işlemleri WORKSPACE
ve derleme kuralları arasında aşağıdaki gibi bölmeniz gerekir:
Platform incelemesi ve bağımlılık numaralandırması. Bu işlemlerin
WORKSPACE
kuralları aracılığıyla yerel olarak yürütülmesi güvenlidir. Bu kurallar, hangi kitaplıkların yüklü olduğunu kontrol edebilir, derlenmesi gereken paketleri indirebilir ve derleme için gerekli yapıları hazırlayabilir. Bu kurallar, uzaktan yürütme için normalde ana makine platformu denetimi sırasında elde edilecek bilgileri sağlamak amacıyla önceden kontrol edilmiş yapıların kullanılmasını da desteklemelidir. Önceden kontrol edilen yapı taşları, Bazel'in bağımlılıkları yerelmiş gibi tanımlamasına olanak tanır. Bunun için koşullu ifadeler veya--override_repository
işaretini kullanın.Hedefe özgü yapıları ve platform mutasyonunu oluşturma veya derleme. Bu işlemler normal derleme kuralları aracılığıyla yürütülmelidir. Harici bağımlılıklar için hedefe özel yapı taşları oluşturan işlemler derleme sırasında yürütülmelidir.
Uzak yürütme için önceden kontrol edilmiş yapıları daha kolay oluşturmak amacıyla, oluşturulan dosyaları yayınlamak için WORKSPACE
kurallarını kullanabilirsiniz. Bu kuralları her yeni yürütme ortamında (ör. her araç seti kapsayıcısında) çalıştırabilir ve referans olarak kullanmak üzere uzaktan yürütme derlemenizin çıkışlarını kaynak deponuzda kontrol edebilirsiniz.
Örneğin, Tensorflow'un cuda
ve python
kuralları için 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.
Uzak yürütme için bir ortam değişkenindeki koşullu ifade, kuralın depoya kontrol edilen dosyaları kullanmasına olanak tanır.
BUILD
dosyaları, hem yerel hem de uzaktan çalışabilen ve burada gösterildiği gibi daha önce repository_ctx.symlink
aracılığıyla yapılan gerekli işlemleri gerçekleştiren genrules
tanımlar.