हर्मिटिटी

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

खास जानकारी

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

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

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

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

फ़ायदे

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

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

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

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

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

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

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

Bazel के साथ हर्मेटिसिटी

Bazel के साथ हर्मेटिक बिल्ड का इस्तेमाल करके, अन्य प्रोजेक्ट को मिली सफलता के बारे में ज़्यादा जानने के लिए, BazelCon की ये बातचीत देखें: