Hermetik

Sorun bildirme Kaynağı görüntüleme Nightly · 7.4 . 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ış

Hermetik derleme sistemi, aynı giriş kaynak kodu ve ürün yapılandırması verildiğinde derlemeyi ana sistemdeki değişikliklerden izole ederek her zaman aynı çıktıyı döndürür.

Derlemeyi izole etmek için hermetik derlemeler, yerel veya uzak ana makineye yüklenen kitaplıklara ve diğer yazılımlara karşı duyarsızdır. Ş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 işlemini geliştirmeyi öğreneceksiniz.

Mühürlülüğün iki önemli yönü vardı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, ana makine ile yerel kullanıcı arasında, dillerin yüklü sürümleri de dahil olmak üzere yalıtım oluşturur.
  • 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 çıkışı önbelleğe alınabilir ve girişler değişmediği sürece işlemin tekrar çalıştırılmasına gerek yoktur.
  • 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 önbellekte aranacak bir işlem grafiği ile karma oluşturma girişleri hesaplar.
  • Birden fazla yapı: Aynı yapıyı kullanarak birden fazla hermetik yapı oluşturabilirsiniz. her biri farklı araçlar ve sürümler kullanarak derleniyor.
  • Yinelenebilirlik: Hermetik derlemeler, derlemeyi oluşturan koşulları tam olarak bildiğiniz için sorun giderme için iyidir.

Hermetik olmayanlığı tanımlama

Bazel'e geçmeye hazırlanıyorsanız mevcut derlemelerinizin mühürlülüğünü önceden iyileştirirseniz taşıma işlemi daha kolay olur. Derlemelerde sızdırmazlık sorunlarının yaygın nedenlerinden bazıları şunlardır:

  • .mk dosyalarında keyfi işleme
  • Dosyaları genellikle yapı kimlikleri veya zaman damgaları içeren, rastgele olmayan bir şekilde oluşturan işlemler ya da araçlar
  • 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ğaca yazma. Bu sayede aynı kaynak ağacının başka bir hedef için kullanılması engellenir. İ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 derleme adımını iki kez veya farklı sistemlerde çalıştırır, dosya içeriklerinin karma değerini karşılaştırır ve farklı sonuçlar alırsanız derleme yeniden oluşturulamaz.
  • İşlemlere istemci ortamı sızıntısı olan tüm durumları yakaladığınızdan emin olmak için çeşitli potansiyel istemci makinelerinden yerel önbellek isabetlerini hata ayıklamak için adımları çalıştırın.
  • Yalnızca kontrol edilen kaynak ağacını ve ana makine araçlarının açık listesini içeren bir Docker kapsayıcısında derleme çalıştırın. Derleme hataları ve hata mesajları, gizli sistem bağımlılıkları yakalar.
  • Uzaktan yürütme kurallarını kullanarak hermetiklik sorunlarını tespit edip düzeltin.
  • Derlemedeki işlemler duruma bağlı olabileceği ve derlemeyi ya da çıkışı etkileyebileceği için işlem başına katı korumalı alan etkinleştirin.
  • Çalışma alanı kuralları, geliştiricilerin harici çalışma alanlarına bağımlılık eklemesine olanak tanır ancak süreçte keyfi işleme yapılmasına izin verecek 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.
ziyaret edin.

Bazel ile hermetiklik

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