CI/CD क्या है? सतत एकीकरण और सतत वितरण
⚡ स्मार्ट सारांश
कंटीन्यूअस इंटीग्रेशन एक सॉफ्टवेयर डेवलपमेंट प्रक्रिया है जिसमें टीम के सदस्य कम से कम रोजाना अपने काम को एक साझा रिपॉजिटरी में मर्ज करते हैं, और प्रत्येक कमिट एक स्वचालित बिल्ड और टेस्ट को ट्रिगर करता है ताकि इंटीग्रेशन त्रुटियों को जल्दी पकड़ा जा सके।

सतत एकीकरण (सीआई) क्या है?
लगातार मेल जोल यह एक सॉफ्टवेयर विकास पद्धति है जिसमें टीम के सदस्य दिन में कम से कम एक बार अपने काम को एकीकृत करते हैं। प्रत्येक एकीकरण की पुष्टि एक स्वचालित बिल्ड द्वारा की जाती है जो त्रुटियों का पता लगाता है। इस अवधारणा को दो दशक पहले "एकीकरण की समस्या" से बचने के लिए पेश किया गया था, जो तब उत्पन्न होती है जब एकीकरण को परियोजना के अंत तक टाल दिया जाता है।
कोड कमिट होने के बाद, सॉफ़्टवेयर को तुरंत बिल्ड और टेस्ट किया जाता है। कई डेवलपर्स वाले बड़े प्रोजेक्ट में, दिन में कई बार कमिट होते हैं। हर कमिट के साथ, कोड को बिल्ड और टेस्ट किया जाता है; यदि टेस्ट पास हो जाता है, तो बिल्ड को डिप्लॉयमेंट के लिए चेक किया जाता है; और यदि डिप्लॉयमेंट सफल होता है, तो कोड को प्रोडक्शन में पुश कर दिया जाता है। यह कमिट, बिल्ड, टेस्ट और डिप्लॉयमेंट का चक्र निरंतर चलता रहता है, जिससे इस प्रक्रिया को यह नाम मिला है।
सतत वितरण (सीडी) क्या है?
निरंतर वितरण यह एक सॉफ्टवेयर इंजीनियरिंग पद्धति है जिसमें एक टीम छोटे-छोटे चक्रों में सॉफ्टवेयर विकसित करती है और यह सुनिश्चित करती है कि इसे किसी भी समय विश्वसनीय रूप से जारी किया जा सके। इसका उद्देश्य अच्छी गति और आवृत्ति के साथ सॉफ्टवेयर का निर्माण, परीक्षण और रिलीज़ करना है, जिससे बार-बार प्रोडक्शन अपडेट के माध्यम से परिवर्तनों को लागू करने की लागत, समय और जोखिम कम हो जाता है।
सीआई और सीडी के बीच अंतर
लगातार मेल जोल यह कोडबेस में प्रत्येक परिवर्तन का स्वचालित रूप से परीक्षण करने का एक तरीका है, जबकि निरंतर वितरण नए फीचर्स, कॉन्फ़िगरेशन और बग फिक्स जैसे परिवर्तनों को सुरक्षित और तेजी से उत्पादन में लाने का एक तरीका है।
बिना सीआई के विकास बनाम सीआई के साथ विकास
| सीआई के बिना विकास | सीआई के साथ विकास |
|---|---|
| बहुत सारे बग | कम बग |
| अनियमित प्रतिबद्धताएं | नियमित प्रतिबद्धताएँ |
| अनियमित और धीमी गति से रिलीज़ | नियमित कार्यशील रिलीज़ |
| कठिन एकीकरण | आसान और प्रभावी एकीकरण |
| परीक्षण देर से होता है | परीक्षण जल्दी और बार-बार किया जाता है |
| समस्याओं को ठीक करना अधिक कठिन है | समस्याओं का पता लगाकर उन्हें तेजी से ठीक किया जाता है। |
| परियोजना की खराब दृश्यता | बेहतर परियोजना दृश्यता |
संकलन और सतत एकीकरण के बीच अंतर
जबकि कंपाइलेशन केवल कोड को मशीन भाषा में परिवर्तित करता है, वहीं CI कई व्यापक गतिविधियाँ करता है:
- डेटाबेस एकीकरण: यह डेटाबेस और कोड को सिंक्रनाइज़ रखता है और डेटाबेस और परीक्षण डेटा के निर्माण को स्वचालित करता है।
- Code निरीक्षण: यह सुनिश्चित करता है कि कोडबेस स्वस्थ हो, समस्याओं की जल्द पहचान करे और सर्वोत्तम कार्यप्रणालियों को लागू करे।
- स्वचालित परिनियोजन: यह आपको उत्पाद को किसी भी समय जारी करने की अनुमति देता है और इसे लगातार डेमो के लिए उपलब्ध स्थिति में रखता है।
- दस्तावेज़ निर्माण: दस्तावेज़ों को अद्यतन रखता है और बिल्ड रिपोर्ट और मेट्रिक्स तैयार करता है।
- संकलन: यह उच्च-स्तरीय कोड को मशीन भाषा में परिवर्तित करता है और यह सुनिश्चित करता है कि यह प्रत्येक लक्ष्य प्लेटफ़ॉर्म पर संकलित हो।
आदर्श रूप से, बिल्ड कमांड लाइन से चलता है न कि किसी IDE पर निर्भर करता है, यह एक समर्पित CI सर्वर पर लगातार होता है (क्रॉन जॉब नहीं), प्रत्येक चेक-इन पर ट्रिगर होता है, और डेवलपर के किसी प्रयास के बिना तत्काल प्रतिक्रिया प्रदान करता है।
सीआई प्रक्रिया को संचालित करने के लिए आपको किन चीजों की आवश्यकता है?
- संस्करण नियंत्रण प्रणाली (वीसीएस): समय के साथ आपके प्रोजेक्ट में किए गए परिवर्तनों को केंद्रीकृत और संरक्षित करने का एक विश्वसनीय तरीका।
- आभासी मशीन: एक अतिरिक्त सर्वर या कम से कम एक आभासी मशीन अपना सिस्टम बनाने के लिए.
- होस्टेड सीआई टूल समाधान: सर्वरों के प्रबंधन से बचने के लिए, होस्टेड समाधान पूरी प्रक्रिया को बनाए रखते हैं और आसान स्केलेबिलिटी प्रदान करते हैं।
- उपकरण: यदि आप सेल्फ-होस्टेड विकल्प चुनते हैं, तो CI टूल जैसे कि इंस्टॉल करें। Jenkins, TeamCity, Bambooया फिर गिटलैब।
कंटीन्यूअस इंटीग्रेशन कैसे काम करता है?
नोकिया इसका एक पुराना उदाहरण है, जो कभी नाइटली बिल्ड नामक प्रक्रिया का उपयोग करता था। दिन भर में कई डेवलपर्स द्वारा कई कमिट करने के बाद, सॉफ्टवेयर को हर रात बिल्ड किया जाता था। चूंकि इसे दिन में केवल एक बार बिल्ड किया जाता था, इसलिए एक बड़े कोडबेस में त्रुटियों को अलग करना, पहचानना और ठीक करना बहुत मुश्किल था।
Later टीम ने कंटीन्यूअस इंटीग्रेशन को अपनाया। डेवलपर द्वारा कोड कमिट करते ही सॉफ्टवेयर का निर्माण और परीक्षण शुरू हो जाता था, जिससे किसी भी त्रुटि का तुरंत पता चल जाता था और जिम्मेदार डेवलपर उस दोष को शीघ्रता से ठीक कर सकता था।
सीआई की विशेषताएं
- यह आपको एक ही स्रोत भंडार को बनाए रखने की अनुमति देता है।
- यह आपको उत्पादन वातावरण के क्लोन का परीक्षण करने की सुविधा देता है, जिसे उत्पादन के करीब रखा जाता है।
- यह वर्तमान बिल्ड की निरंतर उपलब्धता सुनिश्चित करता है।
- यह संपूर्ण बिल्ड, टेस्ट और डिप्लॉय प्रक्रिया को सभी हितधारकों के लिए दृश्यमान बनाता है।
सीआई का उपयोग क्यों करें?
- यह आपको बेहतर गुणवत्ता वाला सॉफ्टवेयर बनाने और दोहराने योग्य परीक्षण करने में मदद करता है।
- यह इंजीनियरिंग टीमों के डिलीवरी आउटपुट को बढ़ाता है और डेवलपर्स को समानांतर रूप से सुविधाओं पर काम करने की अनुमति देता है।
- इससे टीम भर में पारदर्शिता और संचार बढ़ता है।
- समस्या उत्पन्न होने पर तत्काल प्रतिक्रिया प्रदान करता है और तैनाती को तेज और अधिक अनुमानित बनाकर जोखिम को कम करता है।
- इससे रिलीज के समय आखिरी मिनट में होने वाली अफरा-तफरी से बचा जा सकता है।
सीआई सिस्टम का उपयोग करने के सर्वोत्तम तरीके
- जल्दी और बार-बार कमिट करें, और कभी भी टूटा हुआ कोड कमिट न करें।
- बिल्ड संबंधी विफलताओं को तुरंत ठीक करें और मेट्रिक्स के आधार पर कार्रवाई करें।
- प्रत्येक लक्ष्य वातावरण में निर्माण करें और प्रत्येक निर्माण से कलाकृतियाँ बनाएँ।
- बिल्ड प्रक्रिया को स्वचालित करें ताकि यह किसी IDE पर निर्भर न रहे।
- डेटाबेस स्कीमा सहित, जब भी कोई बदलाव हो, तो सब कुछ बनाएं और उसका परीक्षण करें।
- बिल्ड प्रक्रिया को तेज़ रखें और स्वचालित परिनियोजन का उपयोग करें।
सीआई के नुकसान
- सीआई सर्वर का उपयोग करने में अभ्यस्त होने के लिए प्रारंभिक सेटअप समय और प्रशिक्षण की आवश्यकता होती है।
- उपयुक्त परीक्षण प्रक्रियाओं को विकसित किया जाना चाहिए, और एक अच्छी तरह से निर्मित परीक्षण सूट के लिए पर्याप्त संसाधनों की आवश्यकता होती है।
- परिचित प्रक्रियाओं को रूपांतरित करना होगा, और इसके लिए अतिरिक्त सर्वर और वातावरण की आवश्यकता होगी।
- जब एक ही समय में कई डेवलपर अपने कोड को एकीकृत करना चाहते हैं तो प्रतीक्षा समय लग सकता है।
सीआई प्रक्रिया के लिए उपकरण
Jenkins
Jenkins यह एक ओपन-सोर्स निरंतर एकीकरण उपकरण है जिसे लिखा गया है Javaयह एक बड़े कोडबेस में अलग-अलग परिवर्तनों पर वास्तविक समय में परीक्षण और रिपोर्टिंग की सुविधा प्रदान करता है और डेवलपर्स को बिल्ड परीक्षण को स्वचालित करते हुए दोषों को जल्दी से खोजने और हल करने में मदद करता है।
Bamboo
Bamboo यह एक निरंतर एकीकरण बिल्ड सर्वर है जो स्वचालित बिल्ड, परीक्षण और रिलीज़ को एक ही स्थान पर करता है। यह जीरा के साथ सहजता से काम करता है और Bitbucket और यह डॉकर, गिट, एसवीएन, मर्क्यूरियल और एडब्ल्यूएस जैसी कई तकनीकों का समर्थन करता है।
TeamCity
TeamCity यह एक सतत एकीकरण सर्वर है जिसमें कई शक्तिशाली विशेषताएं हैं। यह बिल्ड न चलने पर भी CI सर्वर को स्वस्थ और स्थिर बनाए रखता है और किसी भी प्रोजेक्ट के लिए बेहतर कोड गुणवत्ता प्रदान करता है।
