स्क्रिप्ट से Bazel को कॉल किया जा रहा है

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

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

आउटपुट बेस चुनना

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

अपनी स्क्रिप्ट के लिए सही आउटपुट बेस डायरेक्ट्री, कई चीज़ों पर निर्भर करती है. अगर आपको बिल्ड आउटपुट को किसी खास जगह पर डालना है, तो यह उस आउटपुट बेस को तय करेगा जिसका आपको इस्तेमाल करना है. अगर आप बैजेल को "रीड ओनली" कॉल कर रहे हैं (जैसे कि bazel query), तो लॉक करने के कारक अधिक महत्वपूर्ण होंगे. खास तौर पर, अगर आपको एक साथ स्क्रिप्ट के कई इंस्टेंस चलाने हैं, तो आपको हर एक को अलग (या रैंडम) आउटपुट बेस देना होगा.

अगर डिफ़ॉल्ट आउटपुट बेस वैल्यू का इस्तेमाल किया जाता है, तो आपको उसी लॉक के लिए मुकाबला करना होगा जिसका इस्तेमाल उपयोगकर्ता के इंटरैक्टिव Baze कमांड में किया जा रहा है. अगर उपयोगकर्ता बिल्ड जैसे लंबे समय तक चलने वाले कमांड जारी करता है, तो आपकी स्क्रिप्ट को आगे बढ़ने से पहले उन कमांड के पूरा होने का इंतज़ार करना होगा.

सर्वर मोड के बारे में ज़रूरी जानकारी

डिफ़ॉल्ट रूप से, Basel, ऑप्टिमाइज़ेशन के तौर पर लंबे समय तक चलने वाली सर्वर प्रोसेस का इस्तेमाल करता है. स्क्रिप्ट में Basel का इस्तेमाल करते समय, सर्वर का काम पूरा होने पर shutdown को कॉल करना न भूलें या --max_idle_secs=5 बताएं, ताकि काम न करने वाले सर्वर तुरंत बंद हो जाएं.

मुझे कौनसा एग्ज़िट कोड मिलेगा?

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

सभी निर्देशों के लिए इस्तेमाल होने वाले एग्ज़िट कोड:

  • 0 - हो गया
  • 2 - कमांड लाइन से जुड़ी समस्या, खराब या गैर-कानूनी फ़्लैग या कमांड कॉम्बिनेशन या खराब एनवायरमेंट वैरिएबल. आपकी कमांड लाइन में बदलाव किया जाना चाहिए.
  • 8 - बिल्ड में रुकावट आई, लेकिन हमने उसे ऑर्डर के हिसाब से बंद कर दिया है.
  • 9 - सर्वर लॉक को रोका गया और --noblock_for_lock को पास किया गया.
  • 32 - इस मशीन पर बाहरी सिस्टम की गड़बड़ी नहीं है.

  • 33 - Basel की मेमोरी खत्म हो गई है और वह क्रैश हो गया. आपको अपनी कमांड लाइन में बदलाव करना होगा.

  • 34 - Google के इस्तेमाल के लिए रिज़र्व है.

  • 35 - Google के इस्तेमाल के लिए रिज़र्व है.

  • 36 - पर्यावरण से जुड़ी स्थानीय समस्या, हो सकता है कि यह हमेशा के लिए हो.

  • 37 - बिना गड़बड़ी का अपवाद / बेज़ल (बेज़ल) में गड़बड़ी.

  • 38 - Google के इस्तेमाल के लिए रिज़र्व है.

  • 39 - Basel के लिए ज़रूरी ब्लॉब को रिमोट कैश से हटा दिया गया है.

  • 41-44 - Google के इस्तेमाल के लिए रिज़र्व है.

  • 45 - Build इवेंट सेवा में नतीजे पब्लिश करने में गड़बड़ी हुई.

  • 47 - Google के इस्तेमाल के लिए रिज़र्व है.

bazel build, bazel test निर्देशों के लिए लौटाने के कोड:

  • 1 - बिल्ड नहीं किया जा सका.
  • 3 - ठीक है, लेकिन कुछ टेस्ट पूरे नहीं हो सके या समय खत्म हो गया.
  • 4 - टेस्टिंग हो गई है, लेकिन टेस्टिंग का अनुरोध करने के बावजूद कोई टेस्ट नहीं मिला.

bazel run के लिए:

  • 1 - बिल्ड नहीं किया जा सका.
  • अगर बिल्ड सफल हो जाता है, लेकिन एक्ज़ीक्यूट किया गया सबप्रोसेस, बिना शून्य एग्ज़िट कोड लौटाता है, तो यह कमांड का एग्ज़िट कोड भी होगा.

bazel query के लिए:

  • 3 - कुछ हद तक कामयाब रहा, लेकिन इनपुट BUILD फ़ाइल सेट में क्वेरी के लिए एक या उससे ज़्यादा गड़बड़ियां हुईं. इसलिए, कार्रवाई के नतीजे 100% भरोसेमंद नहीं हैं. ऐसा शायद कमांड लाइन में मौजूद --keep_going विकल्प की वजह से हुआ है.
  • 7 - निर्देश नहीं दिया जा सका.

आने वाले समय में, Basel के वर्शन में सामान्य फ़ेलियर कोड 1 को किसी खास मतलब वाली 'शून्य' वैल्यू के अलावा किसी अन्य वैल्यू से बदल दिया जाता है. इससे, अतिरिक्त एग्ज़िट कोड जोड़े जा सकते हैं. हालांकि, ज़ीरो के अलावा सभी एग्ज़िट वैल्यू में हमेशा गड़बड़ी होगी.

.baezrc फ़ाइल को पढ़ा जा रहा है

डिफ़ॉल्ट रूप से, Basel, बुनियादी Workspace डायरेक्ट्री या उपयोगकर्ता की होम डायरेक्ट्री से .bazelrc फ़ाइल को पढ़ता है. आपकी स्क्रिप्ट के लिए यह तय करना ज़रूरी है या नहीं, यह तय करने का विकल्प होता है कि आपकी स्क्रिप्ट सही तरह से हो रही है या नहीं. अगर आपकी स्क्रिप्ट पूरी तरह से हेर्मेटिक (जैसे कि रिलीज़ बिल्ड करते समय) होनी चाहिए, तो आपको --bazelrc=/dev/null विकल्प का इस्तेमाल करके .bazzrc फ़ाइल को पढ़ने की सुविधा बंद कर देनी चाहिए. अगर आपको लोगों की पसंद की सेटिंग का इस्तेमाल करके बिल्ड पूरा करना है, तो डिफ़ॉल्ट तरीका बेहतर होगा.

कमांड लॉग

Basel आउटपुट एक कमांड लॉग फ़ाइल में भी उपलब्ध होता है, जिसे आपको इस कमांड की मदद से मिल सकता है:

bazel info command_log

कमांड लॉग फ़ाइल में, सबसे हाल के बेज़ेल कमांड की इंटरलीव्ड stdout और stderr स्ट्रीम शामिल हैं. ध्यान दें कि bazel info चलाने से इस फ़ाइल का कॉन्टेंट ओवरराइट हो जाएगा, क्योंकि इसके बाद यह सबसे हाल का Basel निर्देश बन जाएगा. हालांकि, जब तक --output_base या --output_user_root विकल्पों की सेटिंग नहीं बदली जाती, तब तक कमांड लॉग फ़ाइल की जगह नहीं बदलेगी.

आउटपुट को पार्स करना

Basel आउटपुट को कई कामों के लिए पार्स करना काफ़ी आसान है. आपकी स्क्रिप्ट के लिए दो विकल्प मददगार हो सकते हैं: --noshow_progress, जो प्रोग्रेस से जुड़े मैसेज को छिपाता है और --show_result n, जो यह कंट्रोल करता है कि "अप-टू-डेट" मैसेज प्रिंट किए जाएं या नहीं. इन मैसेज को पार्स किया जा सकता है, ताकि पता लगाया जा सके कि कौनसे टारगेट सफलतापूर्वक बनाए गए हैं और उनकी बनाई गई आउटपुट फ़ाइलों की जगह क्या है. अगर आप इन मैसेज पर भरोसा करते हैं, तो पक्का करें कि आपने n की बहुत बड़ी वैल्यू तय की हो.

प्रोफ़ाइल बनाकर परफ़ॉर्मेंस की समस्या हल करना

परफ़ॉर्मेंस की प्रोफ़ाइल सेक्शन देखें.