ইভেন্ট প্রোটোকল তৈরি করুন

বিল্ড ইভেন্ট প্রোটোকল (বিইপি) তৃতীয় পক্ষের প্রোগ্রামগুলিকে একটি বেজেল আহ্বানের অন্তর্দৃষ্টি পেতে অনুমতি দেয়। উদাহরণস্বরূপ, আপনি একটি IDE প্লাগইন বা বিল্ড ফলাফল প্রদর্শন করে এমন একটি ড্যাশবোর্ডের জন্য তথ্য সংগ্রহ করতে BEP ব্যবহার করতে পারেন।

প্রোটোকল হল প্রোটোকল বাফার বার্তাগুলির একটি সেট যার উপরে কিছু শব্দার্থ সংজ্ঞায়িত করা হয়েছে। এতে বিল্ড এবং পরীক্ষার ফলাফল, বিল্ড অগ্রগতি, বিল্ড কনফিগারেশন এবং আরও অনেক কিছু সম্পর্কে তথ্য অন্তর্ভুক্ত রয়েছে। BEP প্রোগ্রামগতভাবে ব্যবহার করার উদ্দেশ্যে করা হয়েছে এবং Bazel এর কমান্ড লাইন আউটপুট পার্সিং অতীতের একটি জিনিস করে তোলে।

বিল্ড ইভেন্ট প্রোটোকল ইভেন্ট হিসাবে একটি বিল্ড সম্পর্কে তথ্য উপস্থাপন করে। একটি বিল্ড ইভেন্ট হল একটি প্রোটোকল বাফার বার্তা যাতে একটি বিল্ড ইভেন্ট শনাক্তকারী, চাইল্ড ইভেন্ট শনাক্তকারীর একটি সেট এবং একটি পেলোড থাকে।

  • বিল্ড ইভেন্ট আইডেন্টিফায়ার: বিল্ড ইভেন্টের ধরণের উপর নির্ভর করে, এটি একটি অস্বচ্ছ স্ট্রিং বা কাঠামোগত তথ্য হতে পারে যা বিল্ড ইভেন্ট সম্পর্কে আরও প্রকাশ করে। একটি বিল্ড ইভেন্ট শনাক্তকারী একটি বিল্ডের মধ্যে অনন্য।

  • শিশু: একটি বিল্ড ইভেন্ট অন্যান্য বিল্ড ইভেন্ট ঘোষণা করতে পারে, তার শিশুদের ক্ষেত্রে তাদের বিল্ড ইভেন্ট শনাক্তকারী অন্তর্ভুক্ত করে। উদাহরণ স্বরূপ, PatternExpanded বিল্ড ইভেন্ট শিশু হিসাবে এটি যে লক্ষ্যগুলি প্রসারিত করে তা ঘোষণা করে৷ প্রোটোকল গ্যারান্টি দেয় যে প্রথম ইভেন্ট ব্যতীত সমস্ত ইভেন্ট পূর্ববর্তী ইভেন্ট দ্বারা ঘোষণা করা হয়।

  • পেলোড : পেলোডে একটি বিল্ড ইভেন্ট সম্পর্কে কাঠামোগত তথ্য থাকে, যা সেই ইভেন্টের জন্য নির্দিষ্ট একটি প্রোটোকল বাফার বার্তা হিসাবে এনকোড করা হয়। মনে রাখবেন যে Aborted প্রত্যাশিত প্রকার নাও হতে পারে, তবে বিল্ডটি সময়ের আগে বাতিল হয়ে গেলে এটি একটি বাতিল বার্তা হতে পারে।

ইভেন্ট গ্রাফ তৈরি করুন

সমস্ত বিল্ড ইভেন্টগুলি তাদের পিতামাতা এবং সন্তানের সম্পর্কের মাধ্যমে একটি নির্দেশিত অ্যাসাইক্লিক গ্রাফ তৈরি করে। প্রাথমিক বিল্ড ইভেন্ট ছাড়া প্রতিটি বিল্ড ইভেন্টে এক বা একাধিক প্যারেন্ট ইভেন্ট থাকে। অনুগ্রহ করে মনে রাখবেন যে একটি শিশু ইভেন্টের সমস্ত অভিভাবক ইভেন্ট অবশ্যই এর আগে পোস্ট করা উচিত নয়৷ একটি বিল্ড সম্পূর্ণ হলে (সফল বা ব্যর্থ) সমস্ত ঘোষিত ইভেন্ট পোস্ট করা হবে। একটি Bazel ক্র্যাশ বা একটি ব্যর্থ নেটওয়ার্ক পরিবহনের ক্ষেত্রে, কিছু ঘোষিত বিল্ড ইভেন্ট কখনই পোস্ট করা যাবে না।

ইভেন্ট গ্রাফের গঠন একটি কমান্ডের জীবনচক্রকে প্রতিফলিত করে। প্রতিটি BEP গ্রাফের নিম্নলিখিত বৈশিষ্ট্যযুক্ত আকৃতি রয়েছে:

  1. রুট ইভেন্ট সবসময় একটি BuildStarted ইভেন্ট। অন্য সব ঘটনা তারই বংশধর।
  2. BuildStarted ইভেন্টের তাৎক্ষণিক শিশুদের কমান্ড সম্পর্কে মেটাডেটা থাকে।
  3. কমান্ড দ্বারা উত্পাদিত তথ্য ধারণকারী ইভেন্ট, যেমন নির্মিত ফাইল এবং পরীক্ষার ফলাফল, BuildFinished ইভেন্টের আগে উপস্থিত হয়।
  4. BuildFinished ইভেন্টটি বিল্ড সম্পর্কে সারাংশ তথ্য ধারণকারী ইভেন্ট দ্বারা অনুসরণ করা যেতে পারে (উদাহরণস্বরূপ, মেট্রিক বা প্রোফাইলিং ডেটা)।

বিল্ড ইভেন্ট প্রোটোকল গ্রহণ করা

বাইনারি বিন্যাসে গ্রাস

একটি বাইনারি বিন্যাসে BEP গ্রাস করতে:

  1. --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 ইভেন্টগুলিকে অস্বচ্ছ বাইট হিসাবে বিবেচনা করে। বিল্ড ইভেন্ট সার্ভিস প্রোটোকলের একটি gRPC ক্লায়েন্ট বাস্তবায়নের সাথে Bazel শিপ যা বিল্ড ইভেন্ট প্রোটোকল ইভেন্ট প্রকাশ করে। --bes_backend=HOST:PORT পতাকা ব্যবহার করে ইভেন্টগুলি পাঠানোর জন্য কেউ শেষ পয়েন্টটি নির্দিষ্ট করতে পারে। যদি আপনার ব্যাকএন্ড gRPC ব্যবহার করে, তাহলে আপনাকে অবশ্যই উপযুক্ত স্কিম সহ ঠিকানাটি উপসর্গ করতে হবে: প্লেইনটেক্সট gRPC এর জন্য grpc grpc:// grpcs:// এবং TLS সক্ষম সহ gRPC এর জন্য grpcs://।

ইভেন্ট সার্ভিস পতাকা তৈরি করুন

বাজেলের বিল্ড ইভেন্ট সার্ভিস প্রোটোকলের সাথে সম্পর্কিত বেশ কয়েকটি পতাকা রয়েছে, যার মধ্যে রয়েছে:

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

এই প্রতিটি পতাকার বর্ণনার জন্য, কমান্ড-লাইন রেফারেন্স দেখুন।

প্রমাণীকরণ এবং নিরাপত্তা

Bazel এর বিল্ড ইভেন্ট সার্ভিস বাস্তবায়ন প্রমাণীকরণ এবং 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 সার্ভার তারপর ক্যাশে থেকে উল্লেখ করা ফাইলগুলি আনতে পারে।

আরো বিস্তারিত জানার জন্য GitHub সমস্যা 3689 দেখুন।