استدعاء البازل من النصوص البرمجية

يمكنك استدعاء Bazel من النصوص البرمجية لتنفيذ إصدار أو إجراء اختبارات أو طلب بحث في الرسم البياني التابع. تم تصميم Bazel لإتاحة برمجة فعّالة، لكن يعرض هذا القسم بعض التفاصيل التي يجب أخذها في الاعتبار لتصبح النصوص البرمجية أكثر فعالية.

اختيار قاعدة الإخراج

يتحكم الخيار --output_base في المكان الذي يجب أن تكتب فيه عملية Bazel مخرجات إصدار معيّن، بالإضافة إلى ملفات العمل المختلفة المستخدمة داخليًا في 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 - محجوز للاستخدام الداخلي في Google.

  • 35 - محجوز للاستخدام الداخلي في Google.

  • 36 - مشكلة بيئية محلية، يُشتبه في كونها دائمة.

  • 37 - استثناء غير معالج / خطأ داخلي في البازيل.

  • 38 - محجوز للاستخدام الداخلي في Google.

  • 41-44 - محجوز للاستخدام الداخلي في Google.

  • 45: حدث خطأ أثناء نشر النتائج على "إنشاء حدث الحدث".

  • 47 - محجوز للاستخدام الداخلي في Google.

رموز الإرجاع للأوامر bazel build، bazel test:

  • 1 - تعذّر الإنشاء.
  • 3: إصدار جيد، ولكن بعض الاختبارات لم تنجح أو انتهت مهلتها.
  • 4: نجحت عملية الإنشاء ولكن لم يتم العثور على أي اختبارات بالرغم من أنه تم طلب الاختبار.

بالنسبة إلى bazel run:

  • 1 - تعذّر الإنشاء.
  • إذا نجح الإصدار، ولكن تؤدي العملية الفرعية المُنفَّذة إلى عرض رمز خروج غير صفري، سيكون رمز الخروج من الأمر أيضًا.

بالنسبة إلى bazel query:

  • 3 - نجاح جزئي، ولكن حدث خطأ واحد أو أكثر في طلب البحث في مجموعة ملفات الإدخال، وبالتالي فإن نتائج العملية غير موثوق بها بنسبة 100%. من المحتمل أن يرجع هذا إلى خيار --keep_going في سطر الأوامر.
  • 7 - تعذّر الطلب.

قد تضيف إصدارات Bazel المستقبلية رموز خروج إضافية، مع استبدال رمز خروج عام بقيمة 1 غير صفرية بمعنى محدد. ومع ذلك، ستُعتبر جميع قيم الخروج غير الصفر دائمًا خطأ.

قراءة ملف bazelrc.

بشكل تلقائي، يقرأ بازيل ملف .bazelrc من دليل مساحة العمل الأساسية أو الدليل الرئيسي للمستخدم. تحديد ما إذا كان هذا الإجراء مناسبًا للنص البرمجي إذا كان النص البرمجي يجب أن يكون متجانسًا تمامًا (كما هو الحال عند إنشاء الإصدارات)، يجب إيقاف قراءة ملف bazelrc باستخدام الخيار --bazelrc=/dev/null. إذا كنت تريد تنفيذ إصدار باستخدام الإعدادات المفضّلة لدى المستخدم، من الأفضل تنفيذ السلوك التلقائي.

سجلّ الأوامر

تتوفّر إخراج Bazel أيضًا في ملف سجلّات الأوامر الذي يمكنك العثور عليه باستخدام الأمر التالي:

bazel info command_log

يحتوي ملف سجلّ الأوامر على أحداث البثّ stdout المضمّنة والشتّارة لأحدث أمر Bazel. يُرجى العلم بأنّ تشغيل bazel info سيحل محل محتوى هذا الملف، لأنه سيصبح بعد ذلك أحدث أمر Bazel. ومع ذلك، لن يتغير موقع ملف سجلّ الأوامر ما لم تغيّر إعداد الخيارين --output_base أو --output_user_root.

تحليل الإخراج

من السهل تحليل إخراج Bazel لعدة أغراض. ويتوفّر خياران قد يكونان مفيدين للنص البرمجي، وهما --noshow_progress الذي يعمل على إيقاف رسائل التقدّم، و--show_result n الذي يتحكّم في ما إذا كانت الرسائل "المُحدّثة" يتم طباعتها أم لا. ، قد يتم تحليل هذه الرسائل لتحديد الأهداف التي تم إنشاؤها بنجاح، بالإضافة إلى موقع ملفات الإخراج التي تم إنشاؤها. تأكّد من تحديد قيمة كبيرة جدًا n إذا كنت تعتمد على هذه الرسائل.

تحديد مشاكل الأداء وحلّها عن طريق التحليل

اطّلِع على قسم تحليل الأداء.