हर्मिटिटी

किसी समस्या की शिकायत करें सोर्स देखें Nightly 8.1 · 8.0 · 7.5 · 7.4 · 7.3 · 7.2

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

खास जानकारी

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

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

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

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

फ़ायदे

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

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

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

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

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

ऐसे बिल्ड की समस्या हल करना जो पूरी तरह से सुरक्षित नहीं हैं

स्थानीय तरीके से लागू करने से शुरू होकर, स्थानीय कैश मेमोरी में हिट करने वाली समस्याओं से, ऐसी कार्रवाइयों का पता चलता है जो पूरी तरह से सुरक्षित नहीं हैं.

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

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