Hermetik

Sorun bildirin Kaynağı göster

Bu sayfada hermetik özellik, hermetik yapıları kullanmanın faydaları ve derlemelerinizde hermetik olmayan davranışları tanımlama stratejileri açıklanmaktadır.

Genel bakış

Aynı giriş kaynak kodu ve ürün yapılandırması verildiğinde hermetik derleme sistemi, derlemeyi ana makine sistemindeki değişikliklerden izole ederek her zaman aynı çıkışı döndürür.

Derlemeyi izole etmek için hermetik derlemeler, yerel veya uzak ana makinede yüklü kitaplıklara ve diğer yazılımlara karşı duyarlı değildir. Derleme araçlarının derleyiciler gibi belirli sürümlerine ve kitaplıklar gibi bağımlılıklara bağlıdır. Bu, derleme ortamı dışındaki hizmetlere bağlı olmadığından derleme işlemini bağımsız hale getirir.

Hermetikliğin iki önemli unsuru şunlardır:

  • İzolasyon: Hermetik derleme sistemleri, araçları kaynak kodu olarak ele alır. Araçların kopyalarını indirip depolama alanlarını yönetebilir ve yönetilen dosya ağaçlarında kullanabilirler. Bu işlem, ana makine ile yerel kullanıcı arasında (dillerin yüklü sürümleri dahil) yalıtım oluşturur.
  • Kaynak kimliği: Hermetik derleme sistemleri, girişlerin aynı olmasını sağlamaya çalışır. Git gibi kod depoları, benzersiz bir karma koduyla kod dönüşümü setlerini tanımlar. Hermetik derleme sistemleri, derlemenin girişindeki değişiklikleri belirlemek için bu karmayı kullanır.

Avantajları

Hermetik yapıların başlıca faydaları şunlardır:

  • Hız: Bir işlemin sonucu önbelleğe alınabilir ve girişler değişmediği sürece işlemin tekrar çalıştırılması gerekmez.
  • Paralel yürütme: Derleme sistemi, belirli bir giriş ve çıkış için verimli ve paralel yürütmeyi hesaplamak amacıyla tüm işlemlerin bir grafiğini oluşturabilir. Derleme sistemi kuralları yükler ve önbellekte aramak için bir işlem grafiği ile karma girişleri hesaplar.
  • Birden fazla derleme: Aynı makinede, her biri farklı araçlar ve sürümler kullanarak olacak şekilde birden fazla hermetik yapı oluşturabilirsiniz.
  • Yeniden üretilebilirlik: Derlemeyi üreten koşulları tam olarak bildiğiniz için hermetik yapılar sorun gidermek için idealdir.

Hermetik olmayanlığı tanımlama

Bazel'a geçmeye hazırlanıyorsanız mevcut derlemelerinizin hermetikliğini önceden iyileştirirseniz taşıma işlemi daha kolay olur. Derlemelerde hermetik olmayanlığın yaygın nedenlerinden bazıları şunlardır:

  • .mk dosyada rastgele işleme
  • Genellikle derleme kimliklerini veya zaman damgalarını içeren, belirsiz olmayan bir şekilde dosyalar oluşturan işlemler veya araçlar
  • Ana makineler arasında farklılık gösteren sistem ikili programları (ör. /usr/bin ikili programları, mutlak yollar, yerel C++ kurallarının otomatik yapılandırması için sistem C++ derleyicileri)
  • Derleme sırasında kaynak ağacına yazma. Bu, aynı kaynak ağacın başka bir hedef için kullanılmasını engeller. İlk derleme kaynak ağacına yazar ve hedef A için kaynak ağacını düzeltir. B hedefi oluşturmaya çalışmak başarısız olabilir.

Hermetik olmayan derlemelerle ilgili sorunları giderme

Yerel yürütmeden başlayarak, yerel önbellek isabetlerini etkileyen sorunlar hermetik olmayan işlemleri ortaya çıkarır.

  • Boş sıralı derlemeler olduğundan emin olun: make komutunu çalıştırır ve başarılı bir derleme elde ederseniz derlemeyi tekrar çalıştırdığınızda hiçbir hedef yeniden oluşturulmamalıdır. Her derleme adımını iki kez veya farklı sistemlerde çalıştırırsanız, dosya içeriklerinin karmasını karşılaştırır ve farklı sonuçlar elde ederseniz derleme tekrarlanabilir olmaz.
  • Çeşitli potansiyel istemci makinelerinde yerel önbellek isabetlerinde hata ayıklama adımlarını çalıştırarak istemci ortamının eylemlere sızdırıldığı durumları yakalayın.
  • Kontrol edilmiş kaynak ağacı ve açık ana makine araçları listesinden başka hiçbir şey içermeyen bir Docker container'ı içinde derleme yürütün. Kesmeler oluşturun. Hata mesajları, örtülü sistem bağımlılıklarını yakalar.
  • Uzaktan yürütme kurallarını kullanarak hermetiklik sorunlarını keşfedin ve düzeltin.
  • Derlemedeki işlemler durum bilgili olabileceğinden ve derlemeyi ya da çıkışı etkileyebileceği için işlem başına sıkı korumalı alan özelliğini etkinleştirin.
  • Workspace kuralları, geliştiricilerin harici çalışma alanlarına bağımlılık eklemesine olanak tanır ancak süreçte rastgele işlemenin gerçekleşmesine izin verecek kadar zengindirler. Bazel komutunuza --experimental_workspace_rules_log_file=PATH işaretini ekleyerek Bazel çalışma alanı kurallarında potansiyel olarak hermetik olmayan bazı işlemlerin günlüğünü alabilirsiniz.

Bazel ile hermetiklik

Diğer projelerin Bazel ile hermetik derlemeleri kullanarak nasıl başarıya ulaştığı hakkında daha fazla bilgi için şu BazelCon konuşmalarına göz atın: