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

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

प्रोटोकॉल, प्रोटोकॉल बफ़र मैसेज का एक सेट होता है जिसमें कुछ सिमेंटिक इसके ऊपर परिभाषित किए जाते हैं. इसमें बिल्ड और जांच के नतीजों, बिल्ड प्रोसेस, बिल्ड कॉन्फ़िगरेशन वगैरह के बारे में जानकारी शामिल होती है. BEP का मकसद प्रोग्राम के तौर पर इस्तेमाल करना है. इससे, बज़ेल की कमांड लाइन को पहले की तरह बनाया जा सकता है.

बिल्ड इवेंट प्रोटोकॉल बिल्ड को इवेंट के रूप में दिखाता है. बिल्ड इवेंट एक प्रोटोकॉल बफ़र संदेश है, जिसमें बिल्ड इवेंट पहचानकर्ता, चाइल्ड इवेंट पहचानकर्ता का एक सेट और एक पेलोड शामिल है.

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

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

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

इवेंट ग्राफ़ बनाएं

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

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

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

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

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

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

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

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

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

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

--build_event_text_file
--build_event_json_file

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

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

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

बेज़ेल के बिल्ड इवेंट सेवा प्रोटोकॉल से संबंधित कई फ़्लैग हैं, जिनमें ये शामिल हैं:

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

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

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

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

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

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

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

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

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