बिल्ड इवेंट प्रोटोकॉल

समस्या की शिकायत करें सोर्स देखें

बिल्ड इवेंट प्रोटोकॉल (BEP) तीसरे पक्ष के प्रोग्राम को बेज़ल के शुरू करने के बारे में अहम जानकारी पाने में मदद करता है. उदाहरण के लिए, IDE प्लगिन या बिल्ड के नतीजे दिखाने वाले डैशबोर्ड के लिए जानकारी इकट्ठा करने के लिए, BEP का इस्तेमाल किया जा सकता है.

प्रोटोकॉल, प्रोटोकॉल बफ़र मैसेज का एक सेट होता है. इसके सबसे ऊपर कुछ सिमेंटिक तय किए जाते हैं. इसमें बिल्ड और टेस्ट के नतीजे, बिल्ड की प्रोग्रेस, बिल्ड कॉन्फ़िगरेशन वगैरह की जानकारी शामिल होती है. बीईपी को प्रोग्राम के हिसाब से इस्तेमाल करने के लिए बनाया गया है. इसलिए, बेज़ेल की कमांड लाइन के आउटपुट को पार्स करना अब पुराना हो गया है.

बिल्ड इवेंट प्रोटोकॉल से बिल्ड के बारे में इवेंट के तौर पर जानकारी मिलती है. बिल्ड इवेंट एक प्रोटोकॉल बफ़र मैसेज होता है, जिसमें बिल्ड इवेंट आइडेंटिफ़ायर, चाइल्ड इवेंट आइडेंटिफ़ायर का सेट, और पेलोड होता है.

  • बिल्ड इवेंट आइडेंटिफ़ायर: बिल्ड इवेंट के टाइप के आधार पर, यह ओपेक स्ट्रिंग या स्ट्रक्चर्ड जानकारी हो सकती है. इससे बिल्ड इवेंट के बारे में ज़्यादा जानकारी मिलती है. बिल्ड इवेंट आइडेंटिफ़ायर, बिल्ड के लिए यूनीक होता है.

  • बच्चे: एक बिल्ड इवेंट, अन्य बिल्ड इवेंट के बारे में एलान कर सकता है. ऐसा करने के लिए, बिल्ड इवेंट आइडेंटिफ़ायर को उसके child फ़ील्ड में शामिल किया जाता है. उदाहरण के लिए, PatternExpanded बिल्ड इवेंट से यह पता चलता है कि वह बच्चों के लिए कौनसे टारगेट लेता है. प्रोटोकॉल इस बात की गारंटी देता है कि पहले इवेंट को छोड़कर, सभी इवेंट की घोषणा पिछले इवेंट के ज़रिए की जाएगी.

  • पेलोड: पेलोड में बिल्ड इवेंट के बारे में स्ट्रक्चर्ड जानकारी होती है. इसे उस इवेंट के लिए खास प्रोटोकॉल बफ़र मैसेज के तौर पर एन्कोड किया जाता है. ध्यान दें कि हो सकता है कि पेलोड उम्मीद के मुताबिक न हो. हालांकि, अगर बिल्ड समय से पहले रद्द हो जाता है, तो यह एक Aborted मैसेज हो सकता है.

बिल्ड इवेंट ग्राफ़

सभी बिल्ड इवेंट अपने माता-पिता और चाइल्ड रिलेशनशिप के ज़रिए, डायरेक्ट एक असाइकलिक ग्राफ़ बनाते हैं. शुरुआती बिल्ड इवेंट को छोड़कर, हर बिल्ड इवेंट में एक या उससे ज़्यादा पैरंट इवेंट होते हैं. कृपया ध्यान दें कि किसी चाइल्ड इवेंट के सभी पैरंट इवेंट, उसके पहले पोस्ट नहीं किए जाने चाहिए. बिल्ड पूरा होने के बाद, एलान किए गए सभी इवेंट पोस्ट कर दिए जाएंगे. Basel के क्रैश होने या नेटवर्क ट्रांसपोर्ट में समस्या होने पर, ऐसा हो सकता है कि बिल्ड के एलान किए गए कुछ इवेंट कभी पोस्ट न किए जाएं.

इवेंट ग्राफ़ का स्ट्रक्चर, किसी कमांड का लाइफ़साइकल दिखाता है. हर बीईपी ग्राफ़ का आकार ये होता है:

  1. रूट इवेंट हमेशा एक BuildStarted इवेंट होता है. अन्य सभी इवेंट, इसके डिसेंडेंट हैं.
  2. BuildStarted इवेंट के तुरंत बाद के बच्चों में, कमांड के बारे में मेटाडेटा मौजूद होता है.
  3. निर्देश से तैयार किए गए डेटा वाले इवेंट, जैसे कि बनाई गई फ़ाइलें और जांच के नतीजे BuildFinished इवेंट से पहले दिखते हैं.
  4. BuildFinished इवेंट के बाद, ऐसे इवेंट हो सकते हैं जिनमें बिल्ड के बारे में खास जानकारी शामिल होती है. जैसे, मेट्रिक या प्रोफ़ाइलिंग डेटा.

बिल्ड इवेंट प्रोटोकॉल का इस्तेमाल करना

बाइनरी फ़ॉर्मैट में इस्तेमाल करें

बाइनरी फ़ॉर्मैट में बीईपी का इस्तेमाल करने के लिए:

  1. --build_event_binary_file=/path/to/file विकल्प तय करके, Basel को किसी फ़ाइल में प्रोटोकॉल बफ़र मैसेज को क्रम से लगाने दें. इस फ़ाइल में क्रम से लगाए गए प्रोटोकॉल बफ़र मैसेज होंगे, जिनमें हर मैसेज की लंबाई को सीमा में रखा जाएगा. हर मैसेज से पहले, इसकी लंबाई को वैरिएबल की लंबाई वाले पूर्णांक के तौर पर एन्कोड किया जाता है. इस फ़ॉर्मैट को प्रोटोकॉल बफ़र लाइब्रेरी के parseDelimitedFrom(InputStream) तरीके का इस्तेमाल करके पढ़ा जा सकता है.

  2. इसके बाद, एक ऐसा प्रोग्राम लिखें जो क्रम से लगाए गए प्रोटोकॉल बफ़र मैसेज से काम की जानकारी ले.

टेक्स्ट या JSON फ़ॉर्मैट में इस्तेमाल करें

नीचे दिए गए Baज़र के कमांड लाइन फ़्लैग, BEP को टेक्स्ट और JSON जैसे फ़ॉर्मैट में ऐसे फ़ॉर्मैट में जनरेट करेंगे जिसे लोग आसानी से पढ़ सकें:

--build_event_text_file
--build_event_json_file

बिल्ड इवेंट सेवा

बिल्ड इवेंट सेवा प्रोटोकॉल, बिल्ड इवेंट पब्लिश करने के लिए एक सामान्य gRPC सेवा है. बिल्ड इवेंट सेवा प्रोटोकॉल, BEP से अलग होता है और BEP इवेंट को ओपेक बाइट के रूप में देखता है. Basel, gRPC क्लाइंट के साथ बिल्ड इवेंट सर्विस प्रोटोकॉल को लागू करके भेजता है. यह बिल्ड इवेंट प्रोटोकॉल इवेंट को पब्लिश करता है. --bes_backend=HOST:PORT फ़्लैग का इस्तेमाल करके, इवेंट भेजने के लिए एंडपॉइंट तय किया जा सकता है. अगर आपका बैकएंड gRPC का इस्तेमाल करता है, तो आपको पते से पहले सही स्कीम जोड़नी होगी: plaintext gRPC के लिए grpc:// और TLS चालू होने पर gRPC के लिए grpcs://.

इवेंट सेवा के लिए फ़्लैग बनाएं

Basel के पास Build Event Service प्रोटोकॉल से जुड़े कई फ़्लैग हैं, जिनमें ये शामिल हैं:

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

इनमें से हर फ़्लैग की जानकारी के लिए, कमांड-लाइन रेफ़रंस सेक्शन देखें.

पुष्टि और सुरक्षा

Bazz के बिल्ड इवेंट सर्विस को लागू करने की सुविधा, पुष्टि करने और TLS के साथ भी काम करती है. इन सेटिंग को नीचे दिए गए फ़्लैग इस्तेमाल करके कंट्रोल किया जा सकता है. कृपया ध्यान दें कि इन फ़्लैग का इस्तेमाल Baज़र के Remote एक्ज़िक्यूशन के लिए भी किया जाता है. इसका मतलब है कि बिल्ड इवेंट सेवा और रिमोट एक्ज़ीक्यूशन एंडपॉइंट के लिए, पुष्टि करने का एक जैसा तरीका और TLS इंफ़्रास्ट्रक्चर शेयर करना ज़रूरी है.

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

इनमें से हर फ़्लैग की जानकारी के लिए, कमांड-लाइन रेफ़रंस सेक्शन देखें.

बिल्ड इवेंट सेवा और रिमोट कैशिंग

BEP में आम तौर पर, मशीन पर सेव की गई लॉग फ़ाइलों (test.log, test.xml, वगैरह) के कई रेफ़रंस शामिल होते हैं, जहां Basel चल रहा है. आम तौर पर, रिमोट BES सर्वर इन फ़ाइलों को ऐक्सेस नहीं कर सकता, क्योंकि ये अलग-अलग मशीनों पर होती हैं. इस समस्या से को हल करने का एक तरीका यह है कि रिमोट कैश मेमोरी की मदद से Basel का इस्तेमाल किया जाए. Baज़र, सभी आउटपुट फ़ाइलों को रिमोट कैश मेमोरी में अपलोड कर देगा (इनमें BEP में बताई गई फ़ाइलें भी शामिल हैं) और BES सर्वर, रेफ़र की गई फ़ाइलों को कैश मेमोरी से फ़ेच कर सकता है.

ज़्यादा जानकारी के लिए, GitHub की समस्या 3689 देखें.