العثور على سلوكيات غير ضارة في قواعد WORKSPACE

في ما يلي، يكون الجهاز المضيف هو الجهاز الذي يتم تشغيل Bazel عليه.

عند استخدام التنفيذ عن بُعد، لا تحدث خطوات الإصدار و/أو الاختبار الفعلي على الجهاز المضيف، ولكن يتم إرسالها بدلاً من ذلك إلى نظام التنفيذ عن بُعد. ومع ذلك، تحدث الخطوات المطلوبة لحل قواعد مساحة العمل على الجهاز المضيف. إذا كانت قواعد مساحة العمل يمكنها الوصول إلى معلومات عن الجهاز المضيف لاستخدامها أثناء التنفيذ، من المرجّح أن تعطّل عملية الإنشاء بسبب عدم التوافق بين البيئات.

كجزء من تعديل قواعد Bazel لتنفيذها عن بُعد، يجب العثور على قواعد Workspace هذه وإصلاحها. تصف هذه الصفحة كيفية العثور على قواعد مساحة العمل التي بها مشاكل باستخدام سجلّ مساحة العمل.

البحث عن قواعد غير متناسقة

تسمح قواعد مساحة العمل لمطوّر البرامج بإضافة تبعيات إلى مساحات العمل الخارجية، ولكنها غنية بما يكفي للسماح للمعالجة العشوائية بالظهور في هذه العملية. تحدث جميع الأوامر ذات الصلة محليًا ويمكن أن تكون مصدرًا محتملاً للتلاعب. ويتم عادةً تقديم السلوك غير المكافئ من خلال repository_ctx الذي يسمح بالتفاعل مع الجهاز المضيف.

بدءًا من Bazel 0.18، يمكنك الحصول على سجلّ ببعض الإجراءات التي قد تكون غير مؤثّرة من خلال إضافة العلامة --experimental_workspace_rules_log_file=[PATH] إلى أمر Bazel. هنا [PATH] هو اسم الملف الذي سيتم بموجبه إنشاء السجل.

ملاحظات:

  • يلتقط السجل الأحداث أثناء تنفيذها. وإذا تم تخزين بعض الخطوات في ذاكرة التخزين المؤقت، لن تظهر في السجلّ، لذلك لا تنسَ تشغيل bazel clean --expunge مسبقًا للحصول على النتيجة الكاملة.

  • في بعض الأحيان، قد تتم إعادة تنفيذ الدوال، وفي هذه الحالة ستظهر الأحداث ذات الصلة في السجل عدة مرات.

  • لا تسجِّل قواعد Workspace حاليًا إلا أحداث Starlark.

للعثور على ما تم تنفيذه أثناء إعداد مساحة العمل:

  1. تشغيل bazel clean --expunge. سيؤدي هذا الأمر إلى محو ذاكرة التخزين المؤقت وأي مستودعات محفوظة، ما يضمن إعادة تشغيل عملية الإعداد.

  2. أضِف --experimental_workspace_rules_log_file=/tmp/workspacelog إلى الأمر Bazel وشغِّل الإصدار.

    يؤدي هذا إلى إنشاء ملف أولي لبرنامج البيانات الأولية من النوع WorkspaceEvent

  3. نزِّل رمز مصدر Bazel وانتقِل إلى مجلد Bazel باستخدام الأمر أدناه. تحتاج إلى رمز المصدر لتتمكّن من تحليل سجلّ مساحة العمل باستخدام أداة تحليل مساحات العمل.

    git clone https://github.com/bazelbuild/bazel.git
    cd bazel
    
  4. في تقرير رمز مصدر Bazel، حوِّل سجلّ مساحة العمل بالكامل إلى نص.

    bazel build src/tools/workspacelog:parser
    bazel-bin/src/tools/workspacelog/parser --log_path=/tmp/workspacelog > /tmp/workspacelog.txt
    
  5. قد تكون المخرجات مطوّلة للغاية وتشتمل على نتائج من قواعد Bazel المضمّنة.

    لاستبعاد قواعد معيّنة من الإخراج، استخدِم الخيار --exclude_rule. مثال:

    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 وابحث عن العمليات غير الآمنة.

يتكوّن السجل من رسائل WorkspaceEvent توضّح بعض الإجراءات غير الضارة التي تم تنفيذها على repository_ctx.

في ما يلي الإجراءات التي تم تمييزها باعتبارها غير محتمَلة غير مسيئة:

  • execute: تنفيذ أمر عشوائي على البيئة المضيفة. تحقَّق مما إذا كان بإمكان هذه الروابط تقديم أي تبعيات في البيئة المضيفة.

  • download، download_and_extract: لضمان إنشاء بنية محفورة، تأكد من تحديد sha256

  • file، template: هذه التقنية ليست متكافئة في حد ذاته، ولكن يمكن أن تكون آلية لتقديم تبعيات في بيئة المضيف في المستودع. تأكّد من أنك تعرف مصدر الإدخال، وأنه لا يعتمد على البيئة المضيفة.

  • os: في الواقع لا يُعدّ هذا الأمر غير متحفظ في حد ذاته، ولكنه طريقة سهلة للحصول على تبعيات في بيئة المضيف. بشكل عام، لا يحمل هذا الاسم المزخرف هذا. أثناء تقييم ما إذا كان استخدامك غنيًا بالتفاصيل، تذكر أنه يتم تشغيل هذا المضيف على المضيف وليس على العاملين. لا يعتبر الحصول على تفاصيل حول البيئة من المضيف فكرة عامة حول الإصدارات عن بُعد.

  • symlink: هذا الإجراء آمن عادةً، ولكن ابحث عن العلامات الحمراء. وقد تؤدي أي روابط رموز إلى خارج المستودع أو إلى مسار مطلق إلى حدوث مشاكل لدى عامل العمل عن بُعد. وإذا تم إنشاء الرابط الرمزي استنادًا إلى خصائص الجهاز المضيف، من المرجح أن ينطوي على مشكلة أيضًا.

  • which: عادةً ما يكون التحقُّق من البرامج المثبَّتة على المضيف أمرًا صعبًا بسبب اختلاف إعدادات الضبط لدى الموظفين.