WORKSPACE नियमों में गैर-नुकसान पहुंचाने वाला व्यवहार ढूंढना

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

नीचे, होस्ट मशीन वह मशीन है जिस पर Bazel चलता है.

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

Bzel के नियमों को रिमोट तरीके से लागू करने के हिस्से के तौर पर, आपको Workspace के ऐसे नियम ढूंढने होंगे और उन्हें ठीक करना होगा. इस पेज पर बताया गया है कि फ़ाइल फ़ोल्डर लॉग का इस्तेमाल करके, समस्या वाले फ़ाइल फ़ोल्डर के नियमों का पता कैसे लगाया जा सकता है.

ऐसे नियम जो नियम के मुताबिक नहीं हैं, उन्हें ढूंढना

Workspace के नियम, डेवलपर को बाहर के फ़ाइल फ़ोल्डर पर निर्भरता जोड़ने की अनुमति देते हैं. हालांकि, ये इतने होते हैं कि इस प्रोसेस में आर्बिट्ररी प्रोसेसिंग की अनुमति दी जा सकती है. सभी मिलते-जुलते निर्देश स्थानीय रूप से दिए जा रहे हैं और हो सकता है कि यह किसी विषय की जानकारी न देने की वजह हो. आम तौर पर, repository_ctx की मदद से ऐसे तरीके की शुरुआत की जाती है जिनसे किसी तरह की रुकावट न होती हो और जिसमें होस्ट मशीन से इंटरैक्ट किया जा सकता है.

Bazel 0.18 की मदद से, --experimental_workspace_rules_log_file=[PATH] को अपने Bazel कमांड में फ़्लैग करके, आपको ऐसी गतिविधियों का लॉग मिल सकता है जो बिना हेलमेट के बनाई गई हों. यहां [PATH] एक फ़ाइल नाम है जिसके तहत लॉग बनाया जाएगा.

इन बातों का ध्यान रखें:

  • लॉग इवेंट के निष्पादन के साथ उन्हें कैप्चर कर लेता है. अगर कुछ चरण कैश मेमोरी में सेव कर लिए जाते हैं, तो वे लॉग में नहीं दिखेंगे. पूरा नतीजा पाने के लिए, पहले से ही bazel clean --expunge न चलाएं.

  • हो सकता है कि कभी-कभी फ़ंक्शन फिर से किए जाएं. ऐसे में, उनसे जुड़े इवेंट, लॉग में कई बार दिखेंगे.

  • Workspace के नियम फ़िलहाल सिर्फ़ Starlark इवेंट को लॉग करते हैं.

फ़ाइल फ़ोल्डर शुरू करने के दौरान क्या चलाया गया, यह जानने के लिए:

  1. bazel clean --expunge चलाएं. इस निर्देश से, आपका लोकल कैश और कैश मेमोरी में सेव किया गया डेटा स्टोर हो जाएगा. साथ ही, यह पक्का हो जाएगा कि सभी टोकन फिर से चलाए जाएंगे.

  2. --experimental_workspace_rules_log_file=/tmp/workspacelog को अपने Beazel कमांड में जोड़ें और बिल्ड चलाएं.

    इससे एक बाइनरी प्रोटो फ़ाइल सूची मैसेज बनता है WorkspaceEvent

  3. Bazel का सोर्स कोड डाउनलोड करें और नीचे दिए गए निर्देश का इस्तेमाल करके, Bazel फ़ोल्डर पर जाएं. Worklog पार्सर के साथ फ़ाइल फ़ोल्डर के लॉग को पार्स करने के लिए, आपको सोर्स कोड की ज़रूरत होगी.

    git clone https://github.com/bazelbuild/bazel.git
    cd bazel
    
  4. Bazel सोर्स कोड के रेपो में, पूरे फ़ाइल फ़ोल्डर के लॉग को टेक्स्ट में बदलें.

    bazel build src/tools/workspacelog:parser
    bazel-bin/src/tools/workspacelog/parser --log_path=/tmp/workspacelog > /tmp/workspacelog.txt
    
  5. आउटपुट में बहुत सारे शब्द हो सकते हैं. इनमें पहले से मौजूद Bazel के नियमों का आउटपुट भी शामिल हो सकता है.

    आउटपुट से खास नियमों को बाहर रखने के लिए, --exclude_rule विकल्प का इस्तेमाल करें. उदाहरण के लिए :

    bazel build src/tools/workspacelog:parser
    bazel-bin/src/tools/workspacelog/parser --log_path=/tmp/workspacelog \
        --exclude_rule "//external:local_config_cc" \
        --exclude_rule "//external:dep" > /tmp/workspacelog.txt
    
  6. /tmp/workspacelog.txt खोलें और असुरक्षित कार्रवाइयों की जांच करें.

लॉग में WorkspaceEvent के मैसेज होते हैं, जिनमें repository_ctx के दौरान की गई ऐसी कार्रवाइयों की जानकारी होती है जो बिना किसी हेलमेट के की जा सकती हैं.

यहां बताया गया है कि किन चीज़ों को आसान तरीके से हाइलाइट नहीं किया जा सकता:

  • execute: यह होस्ट एनवायरमेंट पर आर्बिट्ररी कमांड देता है. देखें कि इससे होस्ट पर निर्भरता हो सकती है या नहीं.

  • download, download_and_extract: हर्मेटिक बिल्ड को पक्का करने के लिए, पक्का करें कि sha256 तय किया गया हो

  • file, template: यह अपने-आप काम नहीं करता, बल्कि यह डेटा स्टोर करने की जगह में, होस्ट एनवायरमेंट पर डिपेंडेंसी लागू करने का तरीका हो सकता है. पक्का करें कि आप समझते हैं कि इनपुट कहां से आता है और यह होस्ट पर निर्भर नहीं होता है.

  • os यह अपने-आप में ज़्यादा अच्छा नहीं है, लेकिन यह होस्ट एनवायरमेंट पर डिपेंडेंसी पाने का आसान तरीका है. आम तौर पर लोग यहां आकर ऐसे काम नहीं करते जो कम्यूनिटी में शामिल होते हैं. यह आकलन करने के लिए कि आपका इस्तेमाल कारगर है या नहीं, ध्यान रखें कि यह सेशन होस्ट पर चलता है, वर्कर पर नहीं. आम तौर पर, होस्ट से एनवायरनमेंट की खास बातें पता करना सही नहीं होता.

  • symlink: आम तौर पर यह सुरक्षित रहता है, लेकिन लाल रंग के फ़्लैग दिखते हैं. डेटा स्टोर करने की जगह के बाहर या किसी पूरे पाथ पर सिमलिंक होने पर, रिमोट वर्कर को समस्या हो सकती है. अगर सिंक मशीन, होस्ट मशीन की प्रॉपर्टी के आधार पर बनाई जाती है, तो इससे भी समस्या हो सकती है.

  • which: होस्ट पर इंस्टॉल किए गए प्रोग्राम की जांच करना आम तौर पर मुश्किल होता है, क्योंकि वर्कर के कॉन्फ़िगरेशन अलग-अलग हो सकते हैं.