सतत एकीकरण की सरल व्याख्या


32

आप निरंतर एकीकरण को कैसे परिभाषित करेंगे और सीआई सर्वर में कौन से विशिष्ट घटक हैं?

मैं मार्केटिंग डिपार्टमेंट में किसी को बताना चाहता हूं कि कंटीन्यूअस इंटीग्रेशन क्या है। वे स्रोत नियंत्रण को समझते हैं - अर्थात वे तोड़फोड़ का उपयोग करते हैं। लेकिन मैं उन्हें ठीक से समझाना चाहता हूं कि CI क्या है। विकिपीडिया लेख कभी नहीं ठीक से परिभाषित करता है, मार्टिन Fowler लेख केवल निम्नलिखित, जो मूल रूप से एक अनुलाप 'एकीकरण' के एक अस्पष्ट व्याख्या के बाद है देता है:

निरंतर एकीकरण एक सॉफ्टवेयर विकास अभ्यास है जहां एक टीम के सदस्य अक्सर अपने काम को एकीकृत करते हैं, आमतौर पर प्रत्येक व्यक्ति कम से कम दैनिक एकीकृत करता है - प्रति दिन कई एकीकरण के लिए अग्रणी। प्रत्येक एकीकरण को जल्द से जल्द एकीकरण त्रुटियों का पता लगाने के लिए एक स्वचालित निर्माण (परीक्षण सहित) द्वारा सत्यापित किया जाता है।

अद्यतन : मैंने उन्हें यह छवि भेजी, मुझे एक सरल नहीं मिला।

यहाँ छवि विवरण दर्ज करें

अपडेट 2 : मार्केटिंग चैप से फीड करें (उस समय के लिए जब 3 प्रश्न थे):

मुझे वास्तव में सभी 3 उत्तर पसंद हैं - अलग-अलग कारणों से। मुझे लगता है कि बस उन सभी को धन्यवाद देने के लिए लॉग इन करें!

जाहिर है वह नहीं कर सकता - इसलिए उसकी ओर से धन्यवाद :)

अद्यतन 3 : मैंने महसूस किया है कि विकिपीडिया लेख को देखकर लगता है कि इसमें वे सिद्धांत शामिल हैं , जब आप सिर्फ शीर्षासन करते हैं, तो यह बहुत अच्छा है:

  1. एक कोड रिपॉजिटरी बनाए रखें
  2. बिल्ड को स्वचालित करें
  3. बिल्ड सेल्फ-टेस्टिंग करें
  4. हर कोई हर दिन बेसलाइन पर जाता है
  5. हर कमिटमेंट (बेसलाइन में) बनाया जाना चाहिए
  6. बिल्ड फास्ट रखें
  7. उत्पादन पर्यावरण के एक क्लोन में परीक्षण करें
  8. नवीनतम डिलिवरेबल्स प्राप्त करना आसान बनाएं
  9. हर कोई नवीनतम बिल्ड के परिणाम देख सकता है
  10. स्वचालित तैनाती

3
o आपका विपणन विभाग तोड़फोड़ का उपयोग करता है? "टू लोकलाइज़्ड" के रूप में बंद करने के लिए वोट दिया ... ;-)
जेरोइन

@Jeroen हां, वास्तव में, वेबसाइट पर फ़ाइलों के लिए। मैंने उन्हें वेब पेज पर एक अच्छा बड़ा लाल बटन बनाया जो सर्वर पर तोड़फोड़ को अद्यतन करने के लिए 'डू इट' कहता है। :)
icc97

जवाबों:


27

जब कोई सॉफ़्टवेयर सॉफ़्टवेयर बनाने वाली फ़ाइलों को बदलता है और फिर उन्हें (दूसरे शब्दों में, मुख्य उत्पाद कोड में परिवर्तन को एकीकृत करने का प्रयास करता है ) तो आप यह सुनिश्चित करना चाहते हैं कि सॉफ़्टवेयर उत्पाद अभी भी सफलतापूर्वक बनाया जा सकता है।

आमतौर पर एक बाहरी सिस्टम होता है, जिसे CI सर्वर कहा जाता है , जो समय-समय पर या हर परिवर्तन पर होता है, संस्करण नियंत्रण से स्रोत फ़ाइलों को ले जाएगा, और उत्पाद (संकलन / परीक्षण / पैकेज) बनाने का प्रयास करेगा। यदि CI सर्वर सफलतापूर्वक बिल्ड कर सकता है, तो परिवर्तनों को सफलतापूर्वक एकीकृत किया गया है।

CI सर्वर को प्रसारित करने में भी सक्षम होना पड़ता है यदि बिल्ड विफल या सफल हो जाता है, इसलिए जेनकिन्स (आज सबसे अधिक इस्तेमाल किया जाने वाला सीआई सर्वर) जैसी प्रणालियों में ईमेल / ग्रंथों के साथ-साथ डैशबोर्ड जैसे वेब इंटरफेस भेजने के तरीके होंगे वर्तमान और पिछले बिल्ड के बारे में जानकारी का गुच्छा, जो चेक-इन कोड, जब चीजें टूट गईं, आदि (ऊपर आपकी छवि पर, यह फीडबैक तंत्र होगा ।)

सीआई महत्वपूर्ण है, क्योंकि यह सुनिश्चित करता है कि निरंतर आधार पर, आपके पास एक काम करने वाला उत्पाद है। यह उन सभी डेवलपर्स के लिए महत्वपूर्ण है जो सॉफ्टवेयर उत्पाद पर काम कर रहे हैं और साथ ही उन सभी लोगों के लिए भी हैं जो सॉफ्टवेयर उत्पाद की दैनिक रिलीज के लिए उपयोग करना चाहते हैं, जैसे क्यूए।


1
निरंतर एकीकरण बिल्ड स्थिति के बारे में परवाह करता है, लेकिन परीक्षणों के बारे में भी।
क्वेंटिन प्रदीप

1
और परिनियोजन, परीक्षण को संकलित करने और चलाने के लिए पर्याप्त नहीं है, लेकिन आपको बायनेरिज़ को एक पर्यावरण पर भी भेजना चाहिए ताकि इसे लोगों (या स्वचालित उपकरण) द्वारा भी जांचा जा सके।
gbjbaanb

1
चूँकि एक साधारण स्पष्टीकरण के लिए पूछा गया प्रश्न मैंने कई (अधिकांश समय परियोजना / टीम विशिष्ट) विवरणों को छोड़ दिया है जो एक CI प्रणाली में जा सकते हैं।
c_maker

क्या यह परीक्षण-संचालित विकास पर निर्भर है? कोड जो हमेशा संकलित होता है वह सही काम नहीं करता है? जब कोड तैयार नहीं होता है, तो विफल होने के लिए, सीआई सिस्टम को कैसे पता चलेगा कि कोड वास्तव में सफलतापूर्वक एकीकृत था?
मोवल्कलर

1
@ user828584: मेरे जवाब में, मेरा मतलब है कि 'परीक्षण' एक निर्माण का हिस्सा है। और एक साइड नोट के रूप में, टीडीडी गुणवत्ता की जांच करने के लिए परीक्षण से अलग है। टीडीडी के साइड-इफेक्ट के रूप में, आपके पास अच्छी तरह से लिखित परीक्षण होंगे, लेकिन आपके पास बिना किसी भी टीडीडी के परीक्षण हो सकते हैं।
c_maker

33

मुझे लगता है कि आपके मार्केटिंग विभाग के लिए यह महत्वपूर्ण नहीं है कि सीआई कैसे काम करता है , लेकिन आपके सॉफ्टवेयर के नए रिलीज के लिए CI का क्या मतलब है

सीआई का आदर्श रूप से मतलब होगा कि आप हर दिन अपने सॉफ़्टवेयर का एक नया संभावित भरोसेमंद संस्करण का उत्पादन कर सकते हैं, जो आपके ग्राहक को प्रस्तुत या बेचने के लिए तैयार है, जिसमें कुछ नई सुविधाएँ, कार्यक्षमता या बगफिक्स जोड़े गए हैं। इसका मतलब यह नहीं है कि आपको हर दिन नया संस्करण देना होगा , लेकिन यदि आप चाहें तो आप कर सकते हैं।

उदाहरण के लिए, यदि आपके पास अपने सॉफ़्टवेयर के "2015" एर संस्करण के लिए आधिकारिक तौर पर जारी किए जाने की योजना बनाई गई एक नई सुविधा है, और आपके पास उस सुविधा के कुछ भाग पहले से ही कोडित और एकीकृत हैं, तो मार्केटिंग के लोग आपके वर्तमान संस्करण को ले सकते हैं सॉफ्टवेयर और इसे दिखाओ - अधिक या कम सुरक्षित रूप से - अगले सम्मेलन में अब 2013 में। सीआई के बिना, उन्हें आपकी टीम को एक अनियोजित कोड फ्रीज के लिए पूछना था, प्रत्येक टीम के सदस्य को उस आधे-बेक्ड फीचर को एकीकृत करना था जिसे वह काम कर रहा है। उत्पाद, उनके पास पर्याप्त स्वचालित परीक्षण तैयार नहीं हो सकते हैं, और अनुमान लगा सकते हैं कि सम्मेलन में क्या होगा - आपकी 2015 की रिलीज़ के "अल्फा संस्करण" में दुर्घटनाग्रस्त होने का बहुत अधिक जोखिम होगा, खासकर जब नई सुविधाओं का प्रदर्शन किया जाता है।


4
लाभ के दृष्टिकोण से इसे प्रदान करने के लिए +1।
प्रहार करें

17

आप यह नहीं जान सकते कि सीआई क्या है जब तक आप नहीं जानते कि हम क्या करते थे। 3 भागों के साथ एक प्रणाली की कल्पना करें। एक यूआई है जो डेटा इकट्ठा करता है और इसे डेटाबेस में डालता है। एक रिपोर्टिंग प्रणाली है जो डेटाबेस से रिपोर्ट बनाती है। और कुछ प्रकार के सर्वर हैं जो डेटाबेस की निगरानी करते हैं और कुछ मानदंड पूरे होने पर ईमेल अलर्ट भेजते हैं।

बहुत पहले यह इस प्रकार लिखा जाएगा:

  1. डेटाबेस और आवश्यकताओं के लिए स्कीमा पर सहमति दें - इसमें कुछ सप्ताह लगेंगे क्योंकि यह एकदम सही होगा क्योंकि आप जल्द ही देखेंगे कि क्यों
  2. 3 टुकड़ों के लिए 3 देवों, या 3 स्वतंत्र टीमों की असाइन करें
  3. प्रत्येक देव अपने टुकड़े पर काम करता है और हफ्तों या महीनों के लिए अपने स्वयं के डेटाबेस कॉपी का उपयोग करके अपने टुकड़े का परीक्षण करता है।

इस समय के दौरान, देवता एक-दूसरे के कोड को नहीं चलाएंगे, और न ही उस डेटाबेस के संस्करण का उपयोग करने का प्रयास करेंगे जो किसी और के कोड द्वारा बनाया गया था। रिपोर्ट लेखक सिर्फ नमूना डेटा का एक गुच्छा जोड़ देगा। अलर्ट लेखक रिकॉर्ड जोड़ देगा जो रिपोर्ट घटनाओं का अनुकरण करता है। और GUI लेखक ने डेटाबेस में यह देखने के लिए देखा कि GUI ने क्या जोड़ा है। समय के साथ, देवों को यह एहसास होगा कि ऐनक किसी तरह से गलत थी, जैसे कि किसी इंडेक्स को निर्दिष्ट नहीं करना या बहुत कम फ़ील्ड लंबाई, और उनके संस्करण में "ठीक" करना। वे दूसरों को बता सकते हैं, जो उस पर कार्रवाई कर सकते हैं, लेकिन आमतौर पर ये चीजें बाद के लिए एक सूची में जाती हैं।

जब सभी तीन भागों को पूरी तरह से कोडित किया गया था, और उनके देवों द्वारा परीक्षण किया गया था, और कभी-कभी उपयोगकर्ताओं द्वारा भी परीक्षण किया गया (उन्हें एक रिपोर्ट, एक स्क्रीन या ईमेल अलर्ट दिखाते हुए) तो "एकीकरण" चरण आएगा। यह अक्सर कई महीनों के बजट में होता था, लेकिन फिर भी खत्म हो जाएगा। देव 1 से क्षेत्र की लंबाई में परिवर्तन की खोज यहां की जाएगी, और विशाल कोड परिवर्तन और संभवतः यूआई परिवर्तन भी करने के लिए देव 2 और 3 की आवश्यकता होगी। यह अतिरिक्त सूचकांक अपना कहर बरपाएगा। और इसी तरह। यदि किसी उपयोगकर्ता द्वारा किसी फ़ील्ड को जोड़ने के लिए देवों में से एक को बताया गया था, और अब ऐसा ही होगा, तो अन्य दो को भी इसमें जोड़ना होगा।

यह चरण क्रूर रूप से दर्दनाक था और भविष्यवाणी करना बहुत असंभव था। तो लोग कहने लगे "हमें अधिक बार एकीकृत करना होगा।" "हमें शुरुआत से एक साथ काम करना होगा।" "जब हम में से कोई एक परिवर्तन अनुरोध उठाता है [तो हमने कैसे बात की है] दूसरों को इसके बारे में जानना होगा।" कुछ टीमों ने अलग-अलग काम करना जारी रखते हुए पहले एकीकरण परीक्षण करना शुरू किया। और कुछ टीमों ने शुरुआत से ही एक-दूसरे के कोड और आउटपुट को हर समय इस्तेमाल करना शुरू कर दिया। और वह कंटीन्यूअस इंटीग्रेशन बन गया।

आप सोच सकते हैं कि मैं उस पहली कहानी को बढ़ा-चढ़ाकर बता रहा हूं। मैंने एक बार एक कंपनी के लिए कुछ काम किया था, जहाँ मेरे संपर्क ने मुझे कुछ खामियों की जाँच करने के लिए बाहर कर दिया, जो निम्न दोषों से पीड़ित थीं:

  • एक स्क्रीन जो वह काम नहीं कर रही थी उसमें एक बटन था जो अभी तक कुछ भी नहीं किया था
  • किसी भी उपयोगकर्ता ने स्क्रीन डिजाइन (सटीक रंग और फोंट; स्क्रीन के अस्तित्व, इसकी क्षमताओं और 300 पेज की युक्ति में इसके कौन से बटन थे) पर हस्ताक्षर नहीं किए थे।

यह उनकी राय थी कि जब तक यह किया जाता है तब तक आप स्रोत नियंत्रण में सामान नहीं रखते हैं। उन्होंने आम तौर पर एक या दो चेकों को YEAR किया। हमारे पास एक दर्शन अंतर था :-)

इसके अलावा, अगर आपको यह विश्वास करना मुश्किल है कि टीमों को डेटाबेस जैसे साझा संसाधन के आसपास काट दिया जाएगा, तो आप वास्तव में विश्वास नहीं करेंगे (लेकिन यह सच है) कि कोड के लिए समान दृष्टिकोण लिया गया था। आप एक फ़ंक्शन लिखने जा रहे हैं जिसे मैं कॉल कर सकता हूं? यह बहुत अच्छा है, आगे बढ़ें और ऐसा करें, मैं इस दौरान मुझे केवल हार्डकोड की आवश्यकता होगी। महीनों बाद मैं अपने कोड को "एकीकृत" करूंगा ताकि यह आपके एपीआई को कॉल करे और हमें पता चल जाएगा कि अगर मैं अशक्त हो जाता हूं, तो मैं उड़ा देता हूं अगर यह अशक्त हो जाता है (और यह बहुत कुछ करता है) यह उन चीजों को वापस करता है जो बहुत बड़े हैं मेरे लिए, यह लीप वर्ष और एक हजार अन्य चीजों को संभाल नहीं सकता है। स्वतंत्र रूप से काम करना और फिर एक एकीकरण चरण होना सामान्य था। अब यह पागलपन जैसा लगता है।


2
हमारे पास एक ऐसी ही कहानी थी जिसमें हमने SP 2003 से SP 2007 में निर्मित एक कस्टम एप्लिकेशन को अपग्रेड किया। VSS (हाँ, VSS :) का उपयोग करते हुए, प्रत्येक डेवलपर ने अपनी फ़ाइल के एक हिस्से की जाँच की, एक सप्ताह और दो के लिए कोडित किया, फिर जब हमने एकीकृत किया। हमारे कोड, बूम, कि जब समस्या शुरू हुई तब से हमारा कोड काफी भटक गया। हमने एक महीने के लिए एकीकरण की समस्या को ठीक किया, और परियोजना ने उन लोगों को समायोजित करने के लिए एक होटल किराए पर लिया जो सप्ताह के दिनों में बहुत दूर रहते हैं। उस दिन, मैंने दैनिक आधार पर कोड को एकीकृत करना सीख लिया :-)
ओनेसिमस यूएनबाउंड

@OnesimusUnbound मुझे याद है कि वीएसएस से क्लीयरकेस से टकरा रहा था ... पैन से आग में। पेय के लिए उसी कंपनी में लौटने के वर्षों बाद, मुझे याद है कि किसी साथी डेवलपर को इस नए स्रोत नियंत्रण का उल्लेख करने के लिए हंसी आती है, जिसे "Git" कहा जाता है, "हमें इसके लिए एक और स्रोत नियंत्रण प्रणाली की क्या आवश्यकता है?"
icc97

1
धन्यवाद - मैंने सीआई को समझने से पहले संघर्ष किया क्योंकि मुझे नहीं पता था कि विकल्प क्या था
Rhys

दिलचस्प। मेरे लिए, यह सीआई को जलप्रपात की तुलना में अधिक लगता है। लेकिन आप एक गैर-झरना पद्धति का उपयोग कर सकते हैं जो इन समस्याओं (जैसे पुनरावृत्ति विकास) से बचा जाता है और सीआई का उपयोग नहीं करता है।
दान मोल्डिंग

@DanMoulding अगर मैं फुर्तीली और पुनरावृत्ति कर रहा हूं और किसी बड़ी चीज के मेरे हिस्से में नहीं है जो किसी और के साथ एकीकृत नहीं है, तो मैं सीआई नहीं कर रहा हूं। बिल्ली, आप झरना और सीआई कर सकते हैं। यह सब डिज़ाइन करें, इसे सभी को कोड करें, यदि आप चाहें तो यह सब परीक्षण करें - यदि हर कोई हर किसी के कोड / स्कीमा / फ़ाइल लेआउट का हर समय उपयोग कर रहा है, तो यह सीआई तब भी है जब आप झरना का उपयोग कर रहे हैं। कनेक्शन यह है कि सीआई के बिना आप BDUF द्वारा जीते और मरते हैं क्योंकि यह आपकी एकमात्र उम्मीद है (और यह एक बेहोश आशा है) एक उचित लंबाई के एकीकरण चरण होने की। एडॉप्टिंग सीआई ने हमें BDUF को जाने दिया।
केट ग्रेगोरी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.