Otizm

Sorun bildirin Kaynağı göster

Bu sayfada otomotiv, hermetik derlemeleri kullanmanın avantajları ve derlemelerinizde hermetik olmayan davranışı tanımlama stratejileri açıklanmaktadır.

Genel bakış

Aynı giriş kaynağı kodu ve ürün yapılandırması verildiğinde hermetik derleme sistemi, derlemeyi değişikliklerden ana makine sistemine ayırarak 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şı hassas değildir. Derleyici araçlarının derleyici gibi belirli sürümlerini ve kitaplık gibi bağımlıları temel alırlar. Bu nedenle, derleme ortamının dışındaki hizmetlere bağımlı olmayan derleme işlemi, bağımsız bir süreç olur.

Etkenin iki önemli yönü şunlardır:

  • İzolasyon: Hermetik derleme sistemleri, araçları kaynak kodu olarak değerlendirir. Bu araçlar, araçların kopyalarını indirip yönetilen dosya ağaçlarının depolama alanlarını ve kullanımını yönetir. Bu işlem, ana makine ile yerel kullanıcı arasında dillerin yüklü sürümleri de dahil olmak üzere izolasyon oluşturur.
  • Kaynak kimliği: Hermetik derleme sistemleri, girişlerin aynı olmasını sağlamaya çalışır. Git gibi kod depoları, benzersiz bir karma kodu içeren kod mutasyonu gruplarını tanımlar. Hermetik derleme sistemleri, binanın girişinde yapılan değişiklikleri tanımlamak için bu karmayı kullanır.

Avantajları

Hermetik yapıların başlıca avantajları ş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ı gerekmez.
  • Paralel yürütme: Derleme sistemi, belirli bir giriş ve çıkış için verimli ve paralel yürütmeyi hesaplamak üzere tüm işlemlerin grafiğini oluşturabilir. Derleme sistemi kuralları yükler ve önbellekte arama yapmak için bir işlem grafiği ve karma girişleri hesaplar.
  • Birden fazla derleme: Aynı makinede her biri farklı araçlar ve sürümler kullanarak birden fazla hermetik derleme oluşturabilirsiniz.
  • Çoğaltılabilirlik: Hermetik yapılar, derlemeyi oluşturan koşulları tam olarak bildiğiniz için sorun giderme açısından kullanışlıdır.

Midesel olmayan kökeni belirleme

Bazel'a geçmeye hazırlanıyorsanız mevcut yapılarınızın otoritesini önceden geliştirirseniz taşıma işlemi daha kolay olur. Derlemelerde yaygın olmayan, yaygın olmayan kaynaklar şunlardır:

  • .mk dosyada rastgele işleme
  • Belirsiz bir şekilde dosya oluşturan işlemler veya araçlar (genellikle bina kimlikleri veya zaman damgaları dahil)
  • Ana makinelerde farklılık gösteren sistem ikili programları (ör. /usr/bin ikili programları, mutlak yollar, yerel C++ kurallarının otomatik yapılandırılması 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 A hedefi için kaynak ağacını düzeltir. Daha sonra B hedefini 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, [meme dışı] işlemleri gösterir.

  • Boş sıralı derlemeler sağlayın: make çalıştırıp başarılı bir derleme alırsanız derlemeyi yeniden çalıştırdığınızda herhangi bir hedef yeniden oluşturulmamalıdır. Her derleme adımını iki kez veya farklı sistemlerde çalıştırırsanız dosya içeriğinin karmasını karşılaştırın ve farklı sonuçlar alın. Derleme yeniden oluşturulamaz.
  • İstemci ortamının işlemlere sızdığı durumları yakaladığınızdan emin olmak için çeşitli potansiyel istemci makinelerinden yerel önbellek isabetlerinde hata ayıklama adımlarını çalıştırın.
  • Docker kapsayıcısı içinde, kontrol edilen kaynak ağacı ve açık ana makine araçlarının listesinden başka bir şey içermeyen bir derleme çalıştırın. Derleme kesintileri ve hata mesajları, dolaylı sistem bağımlılıklarını yakalar.
  • Uzaktan yürütme kurallarını kullanarak kalıtsal sorunları keşfedin ve düzeltin.
  • Bir derlemedeki işlemler durum bilgili olabileceği ve derlemeyi veya çıkışı etkileyebileceği için işlem başına kesinlikle korumalı alan oluşturma özelliğini etkinleştirin.
  • Çalışma alanı kuralları, geliştiricilerin harici çalışma alanlarına bağımlılık eklemesine izin verir ancak süreçte rastgele işlemeye izin verecek kadar zengindir. Bazel çalışma komutunuza, --experimental_workspace_rules_log_file=PATH bayrağı ekleyerek hermetik olmayan bazı işlemlerin günlüğünü bulabilirsiniz.

Bazel ile hermetiklik

Diğer projelerin Bazel ile memetik derlemeler kullanarak nasıl başarılı olduğu hakkında daha fazla bilgi için şu BazelCon konuşmalarına bakın: