پروتکل Build Event Protocol (BEP) به برنامه های شخص ثالث اجازه می دهد تا در مورد فراخوانی Bazel بینشی کسب کنند. برای مثال، میتوانید از BEP برای جمعآوری اطلاعات برای یک افزونه IDE یا داشبوردی که نتایج ساخت را نمایش میدهد استفاده کنید.
پروتکل مجموعه ای از پیام های بافر پروتکل است که در بالای آن مقداری معنایی تعریف شده است. این شامل اطلاعاتی درباره نتایج ساخت و آزمایش، پیشرفت ساخت، پیکربندی ساخت و موارد دیگر است. BEP در نظر گرفته شده است که به صورت برنامه نویسی مصرف شود و تجزیه خروجی خط فرمان Bazel را به چیزی از گذشته تبدیل می کند.
پروتکل Build Event اطلاعات مربوط به یک ساخت را به عنوان رویداد نشان می دهد. یک رویداد ساخت، یک پیام بافر پروتکل است که از یک شناسه رویداد ساخت، مجموعهای از شناسههای رویداد فرزند و یک بارگذاری تشکیل شده است.
Build Event Identifier: بسته به نوع رویداد ساخت، ممکن است یک رشته مات یا اطلاعات ساختاری باشد که اطلاعات بیشتری در مورد رویداد ساخت نشان می دهد. شناسه رویداد ساخت در یک ساخت منحصر به فرد است.
کودکان: یک رویداد ساخت ممکن است رویدادهای ساخت دیگری را با گنجاندن شناسههای رویداد ساخت در فیلد فرزندان خود اعلام کند. برای مثال، رویداد ساخت
PatternExpanded
اهدافی را که در کودکی به آنها گسترش میدهد، اعلام میکند. پروتکل تضمین می کند که همه رویدادها، به جز اولین رویداد، توسط یک رویداد قبلی اعلام می شود.Payload: محموله حاوی اطلاعات ساختاری درباره یک رویداد ساخت است که به عنوان یک پیام بافر پروتکل مخصوص آن رویداد کدگذاری شده است. توجه داشته باشید که payload ممکن است از نوع مورد انتظار نباشد، اما اگر ساخت پیش از موعد متوقف شود، می تواند یک پیام
Aborted
باشد.
ساخت نمودار رویداد
همه رویدادهای ساخت یک نمودار غیر چرخه ای جهت دار را از طریق رابطه والدین و فرزندشان تشکیل می دهند. هر رویداد ساخت به جز رویداد ساخت اولیه یک یا چند رویداد والد دارد. لطفاً توجه داشته باشید که همه رویدادهای والدین یک رویداد کودک لزوماً نباید قبل از آن پست شوند. هنگامی که یک ساخت کامل شد (موفق شد یا ناموفق بود) همه رویدادهای اعلام شده پست خواهند شد. در صورت خرابی Bazel یا انتقال شبکه ناموفق، برخی از رویدادهای ساخت اعلام شده ممکن است هرگز پست نشوند.
ساختار گراف رویداد، چرخه حیات یک فرمان را منعکس می کند. هر نمودار BEP دارای شکل مشخصه زیر است:
- رویداد ریشه همیشه یک رویداد
BuildStarted
است. همه وقایع دیگر از فرزندان آن هستند. - فرزندان فوری رویداد BuildStarted حاوی ابرداده در مورد دستور هستند.
- رویدادهای حاوی داده های تولید شده توسط فرمان، مانند فایل های ساخته شده و نتایج آزمایش، قبل از رویداد
BuildFinished
ظاهر می شوند. - رویداد
BuildFinished
ممکن است با رویدادهایی حاوی اطلاعات خلاصه در مورد ساخت (به عنوان مثال، داده های متریک یا پروفایل) دنبال شود.
مصرف پروتکل رویداد ساخت
در قالب باینری مصرف کنید
برای مصرف BEP در فرمت باینری:
از Bazel بخواهید با تعیین گزینه
--build_event_binary_file=/path/to/file
، پیام های بافر پروتکل را به یک فایل سریالی کند. فایل حاوی پیام های بافر پروتکل سریالی خواهد بود که طول هر پیام محدود شده است. پیشوند هر پیام با طول آن به عنوان یک عدد صحیح با طول متغیر رمزگذاری شده است. این قالب را می توان با استفاده از روشparseDelimitedFrom(InputStream)
کتابخانه بافر پروتکل خواند.سپس، برنامه ای بنویسید که اطلاعات مربوطه را از پیام بافر پروتکل سریالی استخراج کند.
در قالب های متنی یا 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 مراجعه کنید.