یافتن رفتار غیر هرمتیک در قوانین فضای کار

در ادامه، ماشین میزبان ماشینی است که بازل در آن اجرا می شود.

هنگام استفاده از اجرای از راه دور، مراحل ساخت و/یا آزمایش واقعی در ماشین میزبان انجام نمی‌شود، بلکه به سیستم اجرای از راه دور ارسال می‌شود. با این حال، مراحل مربوط به حل و فصل قوانین فضای کاری در ماشین میزبان اتفاق می افتد. اگر قوانین فضای کاری شما برای استفاده در حین اجرا به اطلاعات مربوط به ماشین میزبان دسترسی داشته باشد، احتمالاً ساخت شما به دلیل ناسازگاری بین محیط ها خراب می شود.

به عنوان بخشی از تطبیق قوانین Bazel برای اجرای از راه دور ، باید چنین قوانین فضای کاری را بیابید و آنها را اصلاح کنید. این صفحه نحوه یافتن قوانین فضای کاری بالقوه مشکل ساز را با استفاده از گزارش فضای کاری توضیح می دهد.

یافتن قوانین غیر هرمتیک

قوانین فضای کاری به توسعه‌دهنده این امکان را می‌دهد که وابستگی‌هایی را به فضاهای کاری خارجی اضافه کند، اما آن‌قدر غنی هستند که امکان پردازش دلخواه را در این فرآیند فراهم کنند. تمام دستورات مرتبط به صورت محلی اتفاق می‌افتند و می‌توانند منبع بالقوه‌ای برای عدم هرمتیک باشند. معمولاً رفتار غیر هرمتیک از طریق repository_ctx معرفی می شود که امکان تعامل با ماشین میزبان را فراهم می کند.

با شروع Bazel 0.18، می‌توانید با اضافه کردن پرچم --experimental_workspace_rules_log_file=[PATH] به دستور Bazel خود، گزارشی از برخی از اقدامات بالقوه غیر هرمتیک دریافت کنید. در اینجا [PATH] یک نام فایل است که تحت آن گزارش ایجاد می شود.

موارد قابل توجه:

  • گزارش رویدادها را هنگام اجرا ضبط می کند. اگر برخی از مراحل ذخیره شوند، در گزارش نشان داده نمی شوند، بنابراین برای به دست آوردن یک نتیجه کامل، فراموش نکنید که از قبل bazel clean --expunge را اجرا کنید.

  • گاهی اوقات توابع ممکن است دوباره اجرا شوند، در این صورت رویدادهای مرتبط چندین بار در گزارش نشان داده می شوند.

  • قوانین فضای کاری در حال حاضر فقط رویدادهای 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 : بررسی برنامه های نصب شده روی هاست معمولاً مشکل ساز است زیرا کارگران ممکن است تنظیمات مختلفی داشته باشند.