Hermetik

Sorun bildir Kaynağı göster Gece · 7,3 · 7,2 · 7,1 · 7,0 · 6,5

Bu sayfada hermetik özellik, hermetik yapı kullanmanın faydaları ve stratejileri kullanarak derlemelerinizde hermetik olmayan davranışları belirleyebilirsiniz.

Genel Bakış

Aynı giriş kaynak kodu ve ürün yapılandırması verildiğinde hermetik derleme sistemi, derlemeyi değişikliklerden yalıtarak her zaman aynı çıkışı döndürür bağlantı kurmak için kullanılır.

Yapıyı izole etmek için hermetik derlemeler kitaplıklara ve yerel veya uzak ana makinede yüklü diğer yazılımlar. Şuna bağlıdır: Derleyiciler gibi derleme araçlarının belirli sürümlerini ve bağımlılıkları kitaplıklar. Bu, sisteme bağlı olmadığı için derleme sürecini geliştirmeyi öğreneceksiniz.

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

  • İzolasyon: Hermetik derleme sistemleri, araçları kaynak kodu olarak ele alır. Onlar araçların kopyalarını indirebilir, depolama alanlarını ve yönetilen dosya içinde kullanımını yönetebilir ağaçlar. Bu işlem, ana makine ile yerel kullanıcı arasında yalıtım oluşturur. dillerin yüklü sürümleri dahil.
  • Kaynak kimliği: Hermetik derleme sistemleri, kaynak kimliklerinin aynı olmasını sağlamaya giriş değerleridir. Git gibi kod depoları, benzersiz karma kodu. Hermetik derleme sistemleri, bu karmayı kullanarak derlemenin ilk adımıdır.

Avantajları

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

  • Hız: Bir işlemin sonucu önbelleğe alınabilir ve işlemin tekrar çalıştırılmalı.
  • Paralel yürütme: Belirli bir giriş ve çıkış için derleme sistemi verimli ve paralel hesaplamalar yapmak için tüm işlemlerin bir grafiğini çok önemlidir. Derleme sistemi kuralları yükler ve bir işlem grafiği hesaplar ve karma girişleri vardır.
  • Birden fazla yapı: Aynı yapıyı kullanarak birden fazla hermetik yapı oluşturabilirsiniz. her biri farklı araçlar ve sürümler kullanarak derleniyor.
  • Yeniden üretilebilirlik: Hermetik derlemeler sorun gidermek için idealdir çünkü inşa edeni tam olarak nasıl sağladığını bilmektir.

Hermetik olmayanlığı tanımlama

Bazel'e geçiş yapmaya hazırlanıyorsanız, geçiş yapmak için daha iyi bir yol mevcut derlemelerinizin önceden kontrol edin. Etkilemenin yaygın nedenlerinden bazıları hermetik olmayan yapı aşağıdaki gibidir:

  • .mk dosyada rastgele işleme
  • Belirli bir sınırlama olmadan dosyalar oluşturan işlemler veya araçlar, genelde derleme kimlikleri veya zaman damgaları
  • Ana makineler arasında farklılık gösteren sistem ikili programları (/usr/bin ikili programları, mutlak gibi) yollar, yerel C++ kuralları otomatik yapılandırması için sistem C++ derleyicileri)
  • Derleme sırasında kaynak ağacına yazma. Bu, aynı kaynağın farklı bir hedef için kullanılmasını önler. İlk derleme kaynağa yazar ağacını düzeltiriz. Burada, A hedefi için kaynak ağacı düzeltilir. B hedefi oluşturmaya çalışmak başarısız olur.

Hermetik olmayan derlemelerle ilgili sorunları giderme

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

  • Boş sıralı derlemeler kullanın: make çalıştırır ve başarılı bir derleme elde ederseniz çalıştırmanın hedefleri yeniden oluşturmaması gerekir. Her derlemeyi farklı sistemlerde dosya yüklemek ve dosya içeriklerinin bir karma değerini farklı sonuçlar alabiliyorsanız derleme tekrarlanabilir değildir.
  • Şunun için adımları çalıştır: yerel önbellek isabetlerinde hata ayıklama kullanarak olası tüm istemci makinelerinden, olası satış yaratma istemci ortamının işlemlere sızdırıldığı durumlarla karşılaşabilirsiniz.
  • Şundan başka hiçbir şey içermeyen bir Docker container'ı içinde bir derleme yürütün: kontrol edilen kaynak ağacı ve ana makine araçlarının açık listesi. Kesintiler oluşturmak örtülü sistem bağımlılıklarını yakalar.
  • Hermetiklik sorunlarını uzaktan yürütme kuralları.
  • Yüksek düzeyde korumalı alan oluşturmayı etkinleştir kullanıcılardır. Çünkü derlemelerdeki işlemler durum bilgili olabilir ve bu kullanıcıları etkileyebilir. derlemeniz gerekir.
  • Workspace kuralları geliştiricilerin harici çalışma alanlarına bağımlılık eklemesine olanak tanır, ancak işlemde rastgele işlemlerin gerçekleştirilmesine olanak tanıyacak kadar zengindir. Şunları yapabilirsiniz: Bazel çalışma alanı kurallarında potansiyel olarak hermetik olmayan bazı işlemlerin günlüğünü almak bayrak ekleniyor --experimental_workspace_rules_log_file=PATH - kullanmanız gerekir.

Bazel ile hermetiklik

Diğer projelerin hermetik kodu kullanarak nasıl başarıya ulaştığı hakkında daha fazla bilgi için hakkında daha fazla bilgi edinmek için aşağıdaki BazelCon konuşmalarına bakın: