WORKSPACE Kurallarında Hermetik Olmayan Davranışları Bulma

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

Aşağıdaki örnekte ana makine, Bazel'in çalıştığı makinedir.

Uzaktan yürütme kullanılırken gerçek derleme ve/veya test adımları Bunlar ana makinede gerçekleşir, ancak bunun yerine uzaktan yürütmeye gönderilir. bahsedeceğim. Ancak çalışma alanı kurallarının çözümlenmesi için gereken adımlar gerçekleşiyor kontrol edebilirsiniz. Çalışma alanı kurallarınız kullanmanız durumunda derlemeniz, ve ortamlar arasındaki uyumsuzlukları gösterir.

Uzaktan kumanda için Bazel kurallarını uyarlamanın bir parçası olarak yürütme aşamasındayken, bu çalışma alanı kurallarını ve düzeltebilirsiniz. Bu sayfada, sorunlu olabilecek çalışma alanını nasıl bulacağınız açıklanmaktadır. kurallarını uygulayabilirsiniz.

Hermetik olmayan kuralları bulma

Workspace kuralları, geliştiricinin harici çalışma alanları vardır, ancak bu çalışma alanlarının rastgele işlenmesine izin verecek kadar zengindirler kaç kişiye ihtiyacınız olduğunu anlamış olursunuz. İlgili tüm komutlar yerel olarak gerçekleşir ve bir hermetik olmamasının olası kaynağıdır. Genellikle hermetik olmayan davranış aracılığıyla Etkileşime olanak tanıyan repository_ctx ana makineyle iletişim kurmalısınız.

Bazel 0.18'den başlayarak, hermetik olmayan potansiyel --experimental_workspace_rules_log_file=[PATH] işaretini ekleyerek, kullanmanız gerekir. Burada [PATH], günlüğün yer alacağı dosya adıdır. oluşturuldu.

Önemli noktalar:

  • günlük, yürütülen etkinlikleri yakalar. Bazı adımların önbelleğe alınırsa günlükte görünmez. Bu nedenle, tam bir sonuç almak için bazel clean --expunge çalıştırmayı unutabilirim.

  • Bazen işlevler yeniden yürütülebilir. Bu durumda, etkinlikler günlükte birden çok kez görünür.

  • Çalışma alanı kuralları şu anda yalnızca Starlark etkinliklerini günlüğe kaydeder.

Çalışma alanı ilk kullanıma hazırlanırken nelerin yürütüldüğünü bulmak için:

  1. bazel clean --expunge çalıştır. Bu komut, yerel önbelleğinizi temizler ve tüm başlatmanın yeniden çalıştırılmasını sağlar.

  2. --experimental_workspace_rules_log_file=/tmp/workspacelog adlı yeri şuraya ekleyin: Bazel komutunu çalıştırın ve derlemeyi çalıştırın.

    Bu işlem, şu türdeki mesajları listeleyen bir ikili program protokolü dosyası üretir: WorkspaceEvent

  3. Bazel kaynak kodunu indirin ve şunu kullanarak Bazel klasörüne gidin: aşağıdaki komutu kullanın. çalışma alanı günlüğünü workspacelog ayrıştırıcı.

    git clone https://github.com/bazelbuild/bazel.git
    cd bazel
    
  4. Bazel kaynak kodu deposunda, çalışma alanı günlüğünün tamamını metne dönüştürün.

    bazel build src/tools/workspacelog:parser
    bazel-bin/src/tools/workspacelog/parser --log_path=/tmp/workspacelog > /tmp/workspacelog.txt
    
  5. Çıkış oldukça ayrıntılı olabilir ve yerleşik Bazel'den alınan çıkışları içerebilir. kurallar.

    Belirli kuralları çıkıştan hariç tutmak için --exclude_rule seçeneğini kullanın. Örneğin:

    bazel build src/tools/workspacelog:parser
    bazel-bin/src/tools/workspacelog/parser --log_path=/tmp/workspacelog \
        --exclude_rule "//external:local_config_cc" \
        --exclude_rule "//external:dep" > /tmp/workspacelog.txt
    
  6. /tmp/workspacelog.txt uygulamasını açın ve güvenli olmayan işlemleri kontrol edin.

Günlük şunları içerir: WorkspaceEvent bir cihazda gerçekleştirilen potansiyel hermetik olmayan bazı işlemleri özetleyen repository_ctx.

Potansiyel olarak hermetik olmayan olarak vurgulanan işlemler şunlardır:

  • execute: Ana makine ortamında rastgele bir komut yürütür. Şunları kontrol edin: bunlar ana makine ortamına herhangi bir bağımlılık yaratabilir.

  • download, download_and_extract: Hermetik yapılardan emin olmak için sha256'nın belirtildiği

  • file, template: Bu kendi başına hermetik değildir ancak bir mekanizma olabilir depoya ana makine ortamına bağımlılıklar eklemek için kullanılır. Girişin nereden geldiğini ve gelmediğini anladığınızdan emin olun neler olduğuna bağlıdır.

  • os: Bu kendi başına hermetik olmasa da bağımlılıkları anlamanın kolay bir yoludur. emin olmanız gerekir. Hermetik yapı genellikle bu adı taşımaz. Kullanımınızın hermetik olup olmadığını değerlendirirken, bunun hermetik ana makinede çalışıyor olması gerekir. Ortamla ilgili ayrıntıları alma uzaktan derlemeler için genellikle iyi bir fikir değildir.

  • symlink: Bu normalde güvenlidir ancak tehlike işaretleri olup olmadığına bakın. ile sembolik bağlantılar veya mutlak bir yoldan giderse de ele alacağız. Sembolik bağlantı, ana makine özelliklerine göre oluşturulursa bu da büyük olasılıkla sorun teşkil eder.

  • which: Ana makinede yüklü programların kontrol edilmesi genellikle sorun yaratıyor çünkü çalışanların farklı yapılandırmaları olabilir.