فراخوانی بازل از روی اسکریپت

می‌توانید برای انجام ساخت، اجرای آزمایش‌ها یا پرس و جوی نمودار وابستگی، بازل را از اسکریپت‌ها فراخوانی کنید. Bazel برای فعال کردن اسکریپت‌نویسی مؤثر طراحی شده است، اما این بخش جزئیاتی را فهرست می‌کند که باید به خاطر قوی‌تر کردن اسکریپت‌های خود را در نظر بگیرید.

انتخاب پایه خروجی

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

انتخاب دایرکتوری پایه خروجی صحیح برای اسکریپت به عوامل مختلفی بستگی دارد. اگر نیاز دارید خروجی های ساخت را در یک مکان خاص قرار دهید، این پایه خروجی مورد نیاز برای استفاده را دیکته می کند. اگر در حال برقراری تماس «فقط خواندنی» با bazel query هستید (مانند درخواست بازل)، فاکتورهای قفل کردن اهمیت بیشتری خواهند داشت. به طور خاص، اگر نیاز دارید چندین نمونه از اسکریپت خود را به طور همزمان اجرا کنید، باید به هر کدام یک پایه خروجی متفاوت (یا تصادفی) بدهید.

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

نکاتی در مورد حالت سرور

به طور پیش فرض، Bazel از یک فرآیند سرور طولانی مدت به عنوان بهینه سازی استفاده می کند. هنگام اجرای Bazel در یک اسکریپت، فراموش نکنید که پس از پایان کار با سرور، shutdown را فراخوانی کنید، یا --max_idle_secs=5 را مشخص کنید تا سرورهای بیکار به سرعت خاموش شوند.

چه کد خروجی دریافت خواهم کرد؟

Bazel تلاش می‌کند تا خرابی‌های ناشی از کد منبع مورد بررسی را از خطاهای خارجی که مانع از اجرای درست Bazel می‌شود، متمایز کند. اجرای Bazel می تواند منجر به کدهای خروج زیر شود:

کدهای خروج مشترک برای همه دستورات:

  • 0 - موفقیت
  • 2 - مشکل خط فرمان، پرچم های بد یا غیر قانونی یا ترکیب دستوری، یا متغیرهای بد محیطی. خط فرمان شما باید اصلاح شود.
  • 8 - ساخت قطع شد اما با یک خاموشی منظم خاتمه دادیم.
  • 9 - قفل سرور نگه داشته شده و --noblock_for_lock پاس داده شد.
  • 32 - خرابی محیط خارجی در این دستگاه وجود ندارد.

  • 33 - حافظه بازل تمام شد و تصادف کرد. شما باید خط فرمان خود را اصلاح کنید.

  • 34 - برای استفاده داخلی گوگل رزرو شده است.

  • 35 - برای استفاده داخلی گوگل رزرو شده است.

  • 36 - موضوع محیط زیست محلی مشکوک به دائمی.

  • 37 - استثناء کنترل نشده / خطای بازل داخلی.

  • 38 - برای استفاده داخلی گوگل رزرو شده است.

  • 41-44 - برای استفاده داخلی گوگل رزرو شده است.

  • 45 - خطا در انتشار نتایج در Build Event Service.

  • 47 - برای استفاده داخلی گوگل رزرو شده است.

کدهای بازگشتی برای دستورات bazel build , bazel test :

  • 1 - ساخت شکست خورد.
  • 3 - ساخت OK، اما برخی از تست ها ناموفق و یا زمان تمام شده است.
  • 4 - ساخت موفقیت آمیز بود اما با وجود درخواست تست هیچ تستی پیدا نشد.

برای bazel run :

  • 1 - ساخت شکست خورد.
  • اگر ساخت موفق شد اما زیرفرایند اجرا شده یک کد خروج غیر صفر را برگرداند، کد خروجی دستور نیز خواهد بود.

برای bazel query :

  • 3 - موفقیت جزئی، اما پرس و جو با 1 یا بیشتر خطا در مجموعه فایل BUILD ورودی مواجه شده است و بنابراین نتایج عملیات 100% قابل اعتماد نیستند. این احتمالاً به دلیل وجود گزینه --keep_going در خط فرمان است.
  • 7 - شکست فرمان.

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

خواندن فایل bazelrc

به طور پیش فرض، .bazelrc فایل .bazelrc را از دایرکتوری فضای کار پایه یا فهرست اصلی کاربر می خواند. این که آیا این مطلوب است یا نه، انتخابی برای فیلمنامه شماست. اگر اسکریپت شما باید کاملاً هرمتیک باشد (مثلاً هنگام انجام ساخت‌های انتشار)، باید خواندن فایل bazelrc. را با استفاده از گزینه --bazelrc=/dev/null غیرفعال کنید. اگر می خواهید ساختنی را با استفاده از تنظیمات ترجیحی کاربر انجام دهید، رفتار پیش فرض بهتر است.

گزارش فرمان

خروجی Bazel در یک فایل لاگ فرمان نیز موجود است که با دستور زیر می توانید آن را پیدا کنید:

bazel info command_log

فایل لاگ فرمان شامل جریانهای stdout و stderr در جدیدترین دستور Bazel است. توجه داشته باشید که اجرای bazel info محتویات این فایل را بازنویسی می‌کند، زیرا به جدیدترین دستور Bazel تبدیل می‌شود. با این حال، مکان فایل log فرمان تغییر نخواهد کرد مگر اینکه تنظیمات گزینه های --output_base یا --output_user_root را تغییر دهید.

تجزیه خروجی

تجزیه خروجی Bazel برای بسیاری از اهداف بسیار آسان است. دو گزینه ای که ممکن است برای اسکریپت شما مفید باشند عبارتند از --noshow_progress که پیام های پیشرفت را سرکوب می کند و --show_result n که کنترل می کند آیا پیام های "build-to-date" چاپ شوند یا نه. این پیام ها ممکن است برای کشف اهدافی که با موفقیت ساخته شده اند و مکان فایل های خروجی که ایجاد کرده اند تجزیه و تحلیل شوند. اگر به این پیام ها تکیه می کنید، حتما مقدار بسیار زیادی n را مشخص کنید.

عیب یابی عملکرد با نمایه سازی

بخش پروفایل عملکرد را ببینید.