Workspace के नियमों में नॉन-हार्मेटिक व्यवहार ढूंढना

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

नीचे दी गई सूची में, होस्ट मशीन वह मशीन है जिस पर Ba बैंक चलता है.

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

ऑफ़िस से दूर रहकर काम करने की सुविधा के लिए, Baज़र के नियमों को अपनाने के हिस्से के तौर पर, आपको Workspace के ऐसे नियमों को ढूंढकर उन्हें ठीक करना होगा. इस पेज में फ़ाइल फ़ोल्डर लॉग का इस्तेमाल करके, समस्या वाले फ़ाइल फ़ोल्डर के नियमों को खोजने का तरीका बताया गया है.

नॉन-हर्मेटिक नियमों को ढूंढना

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

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

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

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

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

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

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

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

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

    इससे, WorkspaceEvent टाइप वाला एक बाइनरी प्रोटो फ़ाइल लिस्टिंग मैसेज जनरेट होता है

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

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

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

    आउटपुट से कुछ नियम हटाने के लिए, --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: होस्ट पर इंस्टॉल किए गए प्रोग्राम की जांच करना आम तौर पर समस्या वाला होता है. ऐसा इसलिए, क्योंकि वर्कर के पास अलग-अलग कॉन्फ़िगरेशन हो सकते हैं.