إنشاء بروتوكول الحدث

يسمح بروتوكول إنشاء الحدث (BEP) لبرامج الجهات الخارجية بالحصول على إحصاءات حول استدعاء Bazel. على سبيل المثال، يمكنك استخدام أداة BEP لجمع معلومات في المكوّن الإضافي IDE أو لوحة بيانات تعرض نتائج الإصدار.

البروتوكول هو مجموعة من رسائل البروتوكول المؤقت التي تتضمّن بعض الدلالة اللغوية أعلاه. وهو يتضمن معلومات حول نتائج الاختبار والاختبار، ومستوى التقدّم، وإعدادات الضبط، وغير ذلك الكثير. يهدف BEP إلى استهلاكه آليًا ويجعل تحليل سطر الأوامر في Bazel أمرًا في الماضي.

يمثّل "بروتوكول أحداث الإصدار" معلومات عن الإصدار كأحداث. حدث الإنشاء هو رسالة المخزن المؤقت للبروتوكول التي تتألف من معرّف حدث إصدار ومجموعة من معرّفات الأحداث الفرعية وبيانات أساسية.

  • معرّف حدث الإصدار: اعتمادًا على نوع حدث الإصدار، قد يكون سلسلة مبهمة أو معلومات منظَّمة يكشف المزيد عن حدث الإصدار. يكون معرّف حدث الإصدار فريدًا ضمن الإصدار.

  • الأطفال: قد يُعلن حدث إصدار عن أحداث إصدار أخرى عن طريق تضمين معرّفات أحداث الإنشاء في حقل الأطفال. على سبيل المثال، يعلن حدث الإصدار PatternExpanded عن الأهداف التي يتم توسيعها إلى الأطفال. ويضمن البروتوكول أن جميع الأحداث، باستثناء الفعالية الأولى، سيتم الإعلان عنها من خلال حدث سابق.

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

الرسم البياني لحدث الإنشاء

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

ويعكس بنية الرسم البياني للحدث دورة حياة الأمر. يكون لكل رسم بياني BEP الشكل المميز التالي:

  1. الحدث الجذري هو دائمًا حدث BuildStarted. وجميع الأحداث الأخرى تابعة للتابع.
  2. يتضمن العنصر الثانوي المباشر لحدث BuildStarted بيانات وصفية حول الأمر.
  3. تظهر الأحداث التي تحتوي على بيانات ناتجة عن الأمر، مثل الملفات التي تم إنشاؤها ونتائج الاختبار قبل حدث BuildFinished.
  4. قد يتبع حدث BuildFinished أحداثًا تحتوي على معلومات موجزة حول الإصدار (مثل المقياس أو بيانات الملف الشخصي).

استخدام بروتوكول حدث الإنشاء

الاستهلاك بتنسيق ثنائي

لاستخدام BEP بتنسيق ثنائي:

  1. اطلب من Bazel إنشاء رسائل مؤقتة من البروتوكولات المحفوظة على ملف إلى ملف عن طريق تحديد الخيار --build_event_binary_file=/path/to/file. سيحتوي الملف على رسائل ذات مخزن مؤقت لتسلسلات الرسائل مع تحديد طول كل رسالة. وتكون كل رسالة مسبوقة بطولها مشفّر كعدد صحيح متغيّر الطول. ويمكن قراءة هذا التنسيق باستخدام طريقة مكتبة parseDelimitedFrom(InputStream) المخزن المؤقت للبروتوكولات.

  2. بعد ذلك، اكتب برنامجًا يستخلص المعلومات ذات الصلة من رسالة التخزين المؤقت للبروتوكول التسلسلي.

الاستهلاك بالنصوص أو تنسيقات JSON

ستؤدي علامات سطر الأوامر في Bazel إلى عرض الملف BEP بتنسيقات يمكن للمستخدمين قراءتها، مثل النص وJSON:

--build_event_text_file
--build_event_json_file

خدمة تصميم الفعاليات

خدمة إنشاء أحداث البروتوكول هي خدمة gRPC عامة لنشر أحداث الإصدار. يُعدّ بروتوكول خدمة أحداث الأحداث مستقلاً عن بروتوكول BEP ويتعامل مع أحداث BEP على أنها بايت غير واضحة. يتميّز تطبيق Bazel بميزة تنفيذ عميل gRPC في بروتوكول "خدمة إنشاء الحدث" والتي تنشر أحداث "بروتوكول إنشاء أحداث". يمكن تحديد نقطة النهاية لإرسال الأحداث إلى العلامة --bes_backend=HOST:PORT. إذا كانت الخلفية تستخدم gRPC، يجب إضافة العنوان المناسب للمخطط: grpc:// للخط العادي gRPC وgrpcs:// لـ gRPC مع تفعيل طبقة النقل الآمنة.

علامات خدمة إنشاء الأحداث

يتضمّن Bazel العديد من العلامات المتعلّقة ببروتوكول خدمة فعاليات البناء، بما في ذلك:

  • --bes_backend
  • --[no]bes_best_effort
  • --[no]bes_lifecycle_events
  • --bes_results_url
  • --bes_timeout
  • --project_id

للحصول على وصف لكل واحدة من هذه العلامات، يمكنك الاطّلاع على مرجع سطر الأوامر.

المصادقة والأمان

ويتيح أيضًا تطبيق Bazel لإصدار خدمة الفعاليات أيضًا المصادقة وطبقة النقل الآمنة. يمكن التحكُّم في هذه الإعدادات باستخدام العلامات الواردة أدناه. يُرجى العِلم أنّه يتم استخدام هذه العلامات أيضًا لتنفيذ Bazel عن بُعد. ويعني ذلك أنّه يجب مشاركة خدمة أحداث الإنشاء ونقاط التنفيذ عن بُعد في كل من البنية الأساسية للمصادقة والطبقة النقل الآمنة (TLS) نفسها.

  • --[no]google_default_credentials
  • --google_credentials
  • --google_auth_scopes
  • --tls_certificate
  • --[no]tls_enabled

للحصول على وصف لكل واحدة من هذه العلامات، يمكنك الاطّلاع على مرجع سطر الأوامر.

إنشاء خدمات للفعاليات والتخزين المؤقت عن بُعد

يحتوي BEP عادةً على العديد من المراجع لملفات السجل (test.log, test.xml, إلخ) المخزنة على الجهاز الذي يتم تشغيل Bazel به. وليس بإمكان خادم BES البعيد عادةً الوصول إلى هذه الملفات كما هي على أجهزة مختلفة. ولحل هذه المشكلة، يمكنك استخدام Bazel من خلال التخزين المؤقت عن بُعد. سيحمّل Bazel جميع ملفات المخرجات إلى ذاكرة التخزين المؤقت البعيدة (بما في ذلك الملفات المُشار إليها في BEP) ويمكن لخادم BES جلب الملفات المُشار إليها من ذاكرة التخزين المؤقت.

اطّلِع على مشكلة GitHub 3689 لمزيد من التفاصيل.