Build Event Protocol (BEP) की मदद से, तीसरे पक्ष के प्रोग्राम को बेज़ल के बारे में अहम जानकारी मिली है. उदाहरण के लिए, किसी आईडीई प्लग इन या बिल्ड के नतीजे दिखाने वाले डैशबोर्ड के लिए जानकारी इकट्ठा करने के लिए, BEP का इस्तेमाल किया जा सकता है.
प्रोटोकॉल, प्रोटोकॉल बफ़र मैसेज का एक सेट होता है. इसमें कुछ सिमेंटिक मौजूद होते हैं, जिनके ऊपर यह जानकारी दी गई होती है. इसमें बिल्ड और जांच के नतीजों, बिल्ड की प्रोग्रेस, बिल्ड कॉन्फ़िगरेशन, और दूसरी कई चीज़ों के बारे में जानकारी शामिल होती है. बीईपी का मकसद प्रोग्रामैटिक तरीके से डेटा को इकट्ठा करना है. साथ ही, यह बेज़ल के कमांड लाइन आउटपुट को पास करने की बात बताता है.
बिल्ड इवेंट प्रोटोकॉल, बिल्ड से जुड़ी जानकारी को इवेंट के तौर पर दिखाता है. बिल्ड इवेंट, प्रोटोकॉल बफ़र का मैसेज होता है. इसमें बिल्ड इवेंट आइडेंटिफ़ायर, चाइल्ड इवेंट आइडेंटिफ़ायर का सेट, और पेलोड शामिल होता है.
बिल्ड इवेंट पहचानकर्ता: बिल्ड इवेंट के प्रकार के आधार पर, हो सकता है कि यह बिल्ड इवेंट के बारे में अस्पष्ट स्ट्रिंग या स्ट्रक्चर्ड जानकारी के बारे में ज़्यादा जानकारी दे. बिल्ड इवेंट आइडेंटिफ़ायर, बिल्ड में खास होता है.
चाइल्ड: बिल्ड इवेंट के होने पर, दूसरे बिल्ड इवेंट के बारे में एलान किया जा सकता है. इसके लिए, छोटे बच्चों के फ़ील्ड में उनके बिल्ड इवेंट के आइडेंटिफ़ायर शामिल करने होंगे. उदाहरण के लिए,
PatternExpanded
बिल्ड इवेंट उन टारगेट के बारे में बताता है जिन्हें वह बड़े बच्चों के लिए भी बड़ा करता है. प्रोटोकॉल इस बात की गारंटी देता है कि पहले इवेंट को छोड़कर, सभी इवेंट का एलान किसी पिछले इवेंट के ज़रिए किया जाएगा.पेलोड: पेलोड में बिल्ड इवेंट के बारे में स्ट्रक्चर्ड जानकारी शामिल होती है. यह जानकारी उस इवेंट के लिए खास तौर पर, प्रोटोकॉल बफ़र मैसेज के तौर पर कोड में बदली जाती है. ध्यान दें कि पेलोड उम्मीद के मुताबिक नहीं होगा. हालांकि, अगर बिल्ड समय से पहले रद्द हो जाता है, तो यह
Aborted
का मैसेज हो सकता है.
बिल्ड इवेंट ग्राफ़
सभी बिल्ड इवेंट अपने माता-पिता और बच्चे के रिश्ते के ज़रिए एक डायरेक्ट असाइकलिक ग्राफ़ बनाते हैं. शुरुआती बिल्ड इवेंट को छोड़कर, हर बिल्ड इवेंट में एक या उससे ज़्यादा पैरंट इवेंट होते हैं. कृपया ध्यान दें कि किसी चाइल्ड इवेंट के सभी पैरंट इवेंट को इससे पहले, ज़रूरी तौर पर पोस्ट नहीं किया जाना चाहिए. जब कोई बिल्ड पूरा हो जाता है (सफल या विफल) तो सभी एलान किए गए इवेंट पोस्ट कर दिए जाएंगे. बेज़ल क्रैश होने या नेटवर्क ट्रांसपोर्ट नहीं हो पाने की स्थिति में, कुछ एलान किए गए बिल्ड इवेंट कभी पोस्ट नहीं किए जा सकते.
इवेंट ग्राफ़ की बनावट किसी निर्देश का लाइफ़साइकल दिखाती है. हर बीईपी ग्राफ़ की खासियत नीचे दी गई होती है:
- रूट इवेंट हमेशा
BuildStarted
इवेंट होता है. अन्य सभी इवेंट इसके वंशज हैं. - BuildStartd इवेंट के तुरंत बच्चों में कमांड के बारे में मेटाडेटा शामिल होता है.
- कमांड से तैयार किया गया डेटा वाले इवेंट, जैसे कि बनाई गई फ़ाइलें और जांच के नतीजे
BuildFinished
इवेंट से पहले दिखते हैं. BuildFinished
इवेंट के बाद ऐसे इवेंट लागू किए जा सकते हैं जिनमें बिल्ड के बारे में खास जानकारी, जैसे कि मेट्रिक या प्रोफ़ाइल डेटा शामिल हो.
बिल्ड इवेंट प्रोटोकॉल का इस्तेमाल करना
बाइनरी फ़ॉर्मैट में इस्तेमाल करें
बाइनरी फ़ॉर्मैट में BEP का इस्तेमाल करने के लिए:
Bazel को
--build_event_binary_file=/path/to/file
विकल्प तय करके, फ़ाइल को प्रोटोकॉल बफ़र मैसेज भेजने की अनुमति दें. फ़ाइल में सीरियल बफ़र मैसेज होंगे और हर मैसेज की लंबाई डीलिमिटेड होगी. हर मैसेज के आगे, शुरुआत में वैरिएबल की लंबाई का पूर्णांक दिखाया जाता है. इस फ़ॉर्मैट को प्रोटोकॉल बफ़र लाइब्रेरी केparseDelimitedFrom(InputStream)
तरीके का इस्तेमाल करके पढ़ा जा सकता है.फिर, एक ऐसा प्रोग्राम लिखें जो क्रम में चलने वाले प्रोटोकॉल बफ़र मैसेज से प्रासंगिक जानकारी निकालता है.
टेक्स्ट या JSON फ़ॉर्मैट में इस्तेमाल करें
नीचे दिए गए Bazel कमांड लाइन फ़्लैग, टेक्स्ट और JSON जैसे ह्यूमन-रीडेबल फ़ॉर्मैट में बीईपी दिखाएंगे:
--build_event_text_file
--build_event_json_file
बिल्ड इवेंट सर्विस
बिल्ड इवेंट
सेवा प्रोटोकॉल, बिल्ड इवेंट प्रकाशित करने के लिए सामान्य gRPC सेवा है. बिल्ड इवेंट
सेवा प्रोटोकॉल, BEP से अलग होता है और BEP इवेंट को अपारदर्शी बाइट के तौर पर देखता है.
Bazel वाहनों को बिल्ड इवेंट सर्विस प्रोटोकॉल की मदद से शिप करता है, जो बिल्ड इवेंट प्रोटोकॉल इवेंट को पब्लिश करता है. कोई इवेंट तय करने के लिए एंडपॉइंट तय कर सकता है, ताकि --bes_backend=HOST:PORT
फ़्लैग का इस्तेमाल किया जा सके. अगर आपका बैकएंड gRPC का इस्तेमाल करता है, तो आपको सही स्कीम वाला पता जोड़ना होगा: grpc://
सादे टेक्स्ट के लिए <b class="ph-2-0"> और TLS चालू होने पर gRPC के लिए grpcs://
.
बिल्ड इवेंट सर्विस फ़्लैग
Bazel में बिल्ड इवेंट सर्विस प्रोटोकॉल से जुड़े कई फ़्लैग हैं, जिनमें ये शामिल हैं:
--bes_backend
--[no]bes_best_effort
--[no]bes_lifecycle_events
--bes_results_url
--bes_timeout
--project_id
इन फ़्लैग के बारे में ज़्यादा जानकारी पाने के लिए, कमांड-लाइन रेफ़रंस देखें.
पुष्टि करना और सुरक्षा
Bazel का बिल्ड इवेंट सर्विस लागू करने की सुविधा, पुष्टि करने और TLS टूल के साथ भी काम करती है. इन सेटिंग को नीचे दिए गए फ़्लैग का इस्तेमाल करके कंट्रोल किया जा सकता है. कृपया ध्यान दें कि इन फ़्लैग का इस्तेमाल भी बेज़ल के रिमोट एक्ज़ीक्यूशन के लिए किया जाता है. इसका मतलब यह है कि बिल्ड इवेंट सेवा और रिमोट एक्ज़ीक्यूशन एंडपॉइंट के लिए एक ही पुष्टि करने की सुविधा और 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 देखें.