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

किसी समस्या की शिकायत करें सोर्स देखें Nightly · 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

--build_event_text_file
--build_event_json_file

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

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

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

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

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

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

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

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

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

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

इवेंट सेवा बनाना और रिमोट कैश मेमोरी

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

इसके लिए GitHub की समस्या 3689 देखें देखें.