ساخت پروتکل رویداد

پروتکل Build Event Protocol (BEP) به برنامه های شخص ثالث اجازه می دهد تا در مورد فراخوانی Bazel بینشی کسب کنند. برای مثال، می‌توانید از BEP برای جمع‌آوری اطلاعات برای یک افزونه IDE یا داشبوردی که نتایج ساخت را نمایش می‌دهد استفاده کنید.

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

پروتکل Build Event اطلاعات مربوط به یک ساخت را به عنوان رویداد نشان می دهد. یک رویداد ساخت، یک پیام بافر پروتکل است که از یک شناسه رویداد ساخت، مجموعه‌ای از شناسه‌های رویداد فرزند و یک بارگذاری تشکیل شده است.

  • Build Event Identifier: بسته به نوع رویداد ساخت، ممکن است یک رشته مات یا اطلاعات ساختاری باشد که اطلاعات بیشتری در مورد رویداد ساخت نشان می دهد. شناسه رویداد ساخت در یک ساخت منحصر به فرد است.

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

  • Payload: محموله حاوی اطلاعات ساختاری درباره یک رویداد ساخت است که به عنوان یک پیام بافر پروتکل مخصوص آن رویداد کدگذاری شده است. توجه داشته باشید که payload ممکن است از نوع مورد انتظار نباشد، اما اگر ساخت پیش از موعد متوقف شود، می تواند یک پیام 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

ساخت سرویس رویداد

Build Event Service Protocol یک سرویس gRPC عمومی برای انتشار رویدادهای ساخت است. پروتکل Build Event Service مستقل از BEP است و رویدادهای BEP را به عنوان بایت های مات در نظر می گیرد. Bazel با اجرای پروتکل Build Event Service که رویدادهای Build Event Protocol را منتشر می‌کند، یک کلاینت gRPC ارائه می‌کند. می توان نقطه پایانی را برای ارسال رویدادها با استفاده از --bes_backend=HOST:PORT مشخص کرد. اگر باطن شما از gRPC استفاده می کند، باید آدرس را با طرح مناسب پیشوند کنید: grpc:// برای متن ساده gRPC و grpcs:// برای gRPC با TLS فعال است.

پرچم خدمات رویداد را بسازید

Bazel چندین پرچم مرتبط با پروتکل Build Event Service دارد، از جمله:

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

برای توضیح هر یک از این پرچم ها، به مرجع خط فرمان مراجعه کنید.

احراز هویت و امنیت

پیاده سازی Bazel's Build Event Service از احراز هویت و TLS نیز پشتیبانی می کند. این تنظیمات را می توان با استفاده از پرچم های زیر کنترل کرد. لطفا توجه داشته باشید که از این پرچم ها برای اجرای از راه دور 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 می‌تواند فایل‌های ارجاع‌شده را از حافظه پنهان واکشی کند.

برای جزئیات بیشتر به شماره 3689 GitHub مراجعه کنید.