हर्मिटिटी

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

इस पेज पर हरमैटिटी के बारे में जानकारी दी गई है. साथ ही, हर्मेटिक बिल्ड के इस्तेमाल के फ़ायदे और अपने बिल्ड में नॉन-हर्मेटिक व्यवहार की पहचान करने की रणनीति के बारे में बताया गया है.

खास जानकारी

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

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

हरमैटिसिटी के दो अहम पहलू हैं:

  • अलग-अलग: हर्मेटिक बिल्ड सिस्टम, टूल को सोर्स कोड मानता है. वे टूल की कॉपी डाउनलोड करते हैं और अपना स्टोरेज मैनेज करते हैं. साथ ही, मैनेज की जा रही फ़ाइल ट्री में उनका इस्तेमाल करते हैं. इससे, होस्ट मशीन और लोकल उपयोगकर्ता के बीच आइसोलेशन होता है. इसमें भाषाओं के इंस्टॉल किए गए वर्शन भी शामिल हैं.
  • सोर्स आइडेंटिटी: हर्मेटिक बिल्ड सिस्टम यह पक्का करने की कोशिश करते हैं कि इनपुट एक जैसे हों. Git जैसी कोड रिपॉज़िटरी, यूनीक हैश कोड वाले कोड म्यूटेशन के सेट की पहचान करती हैं. हर्मेटिक बिल्ड सिस्टम इस हैश का इस्तेमाल बिल्ड के इनपुट में हुए बदलावों की पहचान करने के लिए करता है.

फ़ायदे

हर्मेटिक बिल्ड के मुख्य फ़ायदे हैं:

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

नॉन-हर्मेटिकी की पहचान करना

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

  • .mk फ़ाइलों में आर्बिट्रेरी प्रोसेसिंग
  • ऐसी कार्रवाइयां या टूल जो तय नहीं किए जा सकते कि फ़ाइलें कैसे बनाई जाती हैं. आम तौर पर, इनमें बिल्ड आईडी या टाइमस्टैंप शामिल होते हैं
  • सिस्टम बाइनरी, जो सभी होस्ट में अलग-अलग होती हैं. जैसे, /usr/bin बाइनरी, ऐब्सलूट पाथ, नेटिव C++ नियमों के अपने-आप कॉन्फ़िगरेशन के लिए सिस्टम C++ कंपाइलर
  • बिल्ड के दौरान सोर्स ट्री में लिखना. इससे, एक ही सोर्स ट्री को दूसरे टारगेट के लिए इस्तेमाल नहीं किया जा सकता. पहला बिल्ड सोर्स ट्री को लिखता है और टारगेट A के लिए सोर्स ट्री को ठीक करता है. फिर, टारगेट B बनाने की कोशिश नाकाम हो सकती है.

नॉन-हर्मेटिक बिल्ड की समस्या हल करना

लोकल कैश मेमोरी में सेव किए गए हिट पर असर डालने वाली समस्याओं की वजह से, सिस्टम को नॉन-हर्मेटिक ऐक्शन के तौर पर दिखाना शुरू किया जाता है.

  • शून्य क्रम में चलने वाले बिल्ड पक्का करें: अगर make चलाने पर आपको बिल्ड मिल जाता है, तो बिल्ड को फिर से चलाने से कोई टारगेट दोबारा नहीं बनता है. अगर हर बिल्ड चरण को दो बार या अलग-अलग सिस्टम पर चलाया जाता है, तो फ़ाइल के कॉन्टेंट के हैश की तुलना करें और अलग-अलग नतीजे पाएं. ऐसा इसलिए, क्योंकि बिल्ड को फिर से बनाया नहीं जा सकता.
  • कई तरह की संभावित क्लाइंट मशीनों से लोकल कैश हिट को डीबग करने का तरीका अपनाएं, ताकि यह पक्का हो सके कि कार्रवाइयों में क्लाइंट एनवायरमेंट के लीक होने के मामलों का पता चल जाता है.
  • एक ऐसे डॉक कंटेनर के अंदर बिल्ड एक्ज़ीक्यूट करें जिसमें चेक-आउट किए गए सोर्स ट्री और होस्ट टूल की साफ़ तौर पर बताई गई सूची के अलावा कुछ भी न हो. बिल्ड ब्रेकेज और गड़बड़ी वाले मैसेज इंप्लिसिट सिस्टम डिपेंडेंसी को पकड़ लेंगे.
  • रिमोट एक्ज़ीक्यूशन के नियमों का इस्तेमाल करके, हरमैटिसिटी से जुड़ी समस्याओं का पता लगाएं और उन्हें ठीक करें.
  • हर कार्रवाई के लेवल पर सख्त सैंडबॉक्सिंग चालू करें, क्योंकि बिल्ड में की गई कार्रवाइयां स्टेटफ़ुल हो सकती हैं और बिल्ड या आउटपुट पर असर डाल सकती हैं.
  • फ़ाइल फ़ोल्डर के नियम डेवलपर को बाहरी फ़ाइल फ़ोल्डर में डिपेंडेंसी जोड़ने की अनुमति देते हैं. हालांकि, इनमें इतनी जानकारी होती है कि प्रोसेस में आर्बिट्रेरी प्रोसेसिंग की अनुमति मिलती है. Basel Workspace के नियमों में, आपको कुछ ऐसी कार्रवाइयों का लॉग मिल सकता है जो शायद नॉन-हर्मेटिक हैं. इसके लिए, आपको अपने Basel निर्देश में --experimental_workspace_rules_log_file=PATH फ़्लैग जोड़ना होगा.

बेज़ल के साथ हरमैटिसिटी

इस बारे में ज़्यादा जानकारी के लिए कि Basel के साथ हर्मेटिक बिल्ड का इस्तेमाल करके दूसरे प्रोजेक्ट को कैसे सफलता मिली, BaselCon की ये बातें देखें: