किस बिंदु पर एक निरंतर एकीकरण सर्वर दिलचस्प है?


9

मैं जेन सर्वर जैसे जेन सर्वर के बारे में थोड़ा पढ़ रहा हूं और सोच रहा हूं: यह किस बिंदु पर उपयोगी है?

क्योंकि निश्चित रूप से एक छोटी सी परियोजना के लिए जहां आपके पास केवल 5 कक्षाएं और 10 यूनिट परीक्षण होंगे, कोई वास्तविक आवश्यकता नहीं है।

यहां हमने लगभग 1500 यूनिट परीक्षण किए हैं और वे लगभग 90 सेकंड में (पुराने कोर 2 डुओ वर्कस्टेशंस पर) पास होते हैं (क्योंकि वे वास्तव में "इकाइयों" का परीक्षण कर रहे हैं और इसलिए बहुत तेज़ हैं)। हमारे पास यह नियम है कि जब हम परीक्षा में असफल होते हैं तो हम कोड नहीं दे सकते।

इसलिए प्रत्येक डेवलपर्स प्रतिगमन को रोकने के लिए अपने सभी परीक्षण शुरू करता है।

जाहिर है, क्योंकि सभी डेवलपर्स हमेशा सभी परीक्षण लॉन्च करते हैं, जैसे ही एक डेवलपर दूसरे के परिवर्तन (जब कोई हो) को खींचता है तो हम परस्पर विरोधी परिवर्तनों के कारण त्रुटियों को पकड़ लेते हैं।

यह अभी भी मेरे लिए बहुत स्पष्ट नहीं है: क्या मुझे जेनकिंस की तरह एक सीआई सर्वर स्थापित करना चाहिए? यह क्या लाएगा?

क्या यह सिर्फ गति हासिल करने के लिए उपयोगी है? (हमारे मामले में मुद्दा नहीं)

क्या यह उपयोगी है क्योंकि पुराने बिल्ड को फिर से बनाया जा सकता है? (लेकिन हम पुराने रेव्स की जाँच करके मर्क्यूरियल के साथ ऐसा कर सकते हैं)

मूल रूप से मैं समझता हूं कि यह उपयोगी हो सकता है लेकिन मैं वास्तव में ऐसा देखने में विफल रहता हूं।

मेरे द्वारा ऊपर उठाए गए बिंदुओं को ध्यान में रखते हुए कोई भी स्पष्टीकरण सबसे स्वागत योग्य होगा।

जवाबों:


9

क्या यह सिर्फ गति हासिल करने के लिए उपयोगी है? (हमारे मामले में मुद्दा नहीं)

किसी भी समय साइकिल चलाना आपकी प्रक्रिया का वह समय है जिसे आप विकास के प्रवाह में लाने में खर्च कर सकते हैं।

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

क्या यह उपयोगी है क्योंकि पुराने बिल्ड को फिर से बनाया जा सकता है? (लेकिन हम पुराने रेव्स की जाँच करके मर्क्यूरियल के साथ ऐसा कर सकते हैं)

नहीं, आप निर्माण नहीं करते। आप इसे बनाए गए निर्माण का उपयोग करते हैं, और इसे तब तक इधर-उधर रखते हैं जब तक कि आपकी अवधारण सेटिंग्स इसे टॉस न कर दें।

आप इसका निर्माण बिल्ड सर्वर पर करते हैं, जैसा कि कुछ देव बॉक्स पर विरोध किया गया है।

यहां हमने लगभग 1500 यूनिट परीक्षण किए हैं और वे लगभग 90 सेकंड में (पुराने कोर 2 डुओ वर्कस्टेशंस पर) पास होते हैं (क्योंकि वे वास्तव में "इकाइयों" का परीक्षण कर रहे हैं और इसलिए बहुत तेज़ हैं)। हमारे पास यह नियम है कि जब हम परीक्षा में असफल होते हैं तो हम कोड नहीं दे सकते।

इसके अलावा आप अपने कोड पर स्वचालित एकीकरण या एंड-टू-एंड टेस्ट चलाने में सक्षम नहीं होना चाहते हैं और उन मुद्दों को पकड़ सकते हैं जो यूनिट परीक्षण नहीं पकड़ेंगे?

आप उन्हें देव बक्सों पर नहीं चलाना चाहेंगे, क्योंकि यह उस वातावरण को स्थापित करने और बनाए रखने के लिए एक दर्द होगा। एकीकरण परीक्षण भी निष्पादित करने के लिए बहुत धीमी गति से होते हैं।

यह किस बिंदु पर उपयोगी है?

यह किसी भी अन्य की तरह एक निवेश है।

एक बार इसका उपयोग करें और आप पीछे आ सकते हैं या केवल तोड़ सकते हैं। इसे कई परियोजनाओं पर उपयोग करें और आप संभवतः आगे निकल आएंगे।

यह आपके द्वारा किए जाने वाले अनुप्रयोगों के प्रकार पर भी निर्भर करता है।

यदि आप वेब एप्लिकेशन बनाते हैं जिन्हें जावा एप्लिकेशन सर्वर, या IIS में तैनात करने की आवश्यकता होती है, तो CI एक नॉन-ब्रेनर बन जाता है। यदि आपके पास अपनी परियोजना के भाग के रूप में एक डेटाबेस है तो वही। तैनाती मैन्युअल रूप से निष्पादित करने के लिए दर्दनाक है, और आपकी क्यूए टीम (यदि आपके पास एक है) को किसी बिंदु पर दैनिक रूप से इसकी आवश्यकता होगी।

इसके अलावा, आप यह देखना चाहते हैं कि जोएल स्पोल्स्की के 12 स्टेप्स से बेहतर कोड के साथ आपकी ज़रूरतें और समस्याएं किस तरह से मेल खाती हैं । विशेष रूप से 2, 3 और 10 (हालांकि वे सभी दिलचस्प और महत्वपूर्ण हैं)।


2
+1 ... ठीक है अब आप मुझसे बात कर रहे हैं! "खोने नहीं समय कर बनाता है" एक बहुत की तरह तर्क मैं। हमारा निर्माण प्रतिदिन कई बार किया जाता है और केवल एक-क्लिक होता है लेकिन ... यह सभी परीक्षणों को चलाने की तुलना में धीमा है (इसलिए देवता समय खो रहे हैं)। इसके अलावा, मुझे अधिक जटिल परीक्षणों का विचार पसंद है: यह मैं देखता हूं कि हम सीआई सर्वर से कैसे लाभ उठा सकते हैं। 2,3 और 10 के बारे में: हाँ, हाँ और हाँ (एक एंट कार्य पर एक क्लिक) ... लेकिन यार, इन 12 नियमों को अपडेट किया जाना चाहिए: क्या आप स्रोत नियंत्रण का उपयोग करते हैं? मैं उदाहरण के लिए सीवीएस के बजाय गैर हूं; ) (सिर्फ आधा-मजाक;)
सेड्रिक मार्टिन

7

यह किस बिंदु पर उपयोगी है?

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

आपको शायद अभी तक CI की आवश्यकता नहीं है, लेकिन मुझे लगता है कि जब आप परीक्षण चरण में पहुंचेंगे तो यह उपयोगी हो जाएगा। जेनकिन्स की स्थापना कुछ घंटों में की जाती है और यह आपके परीक्षण को सरल बनाएगा और मूर्खतापूर्ण गलतियों से बचने में मदद करेगा (ऐसा विशेष रूप से तब होता है जब आप उत्पादन को शीघ्रता से ठीक करते हैं)।


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

@CedricMartin: CI सर्वर सिर्फ एक है, इसलिए आपके द्वारा किए गए वातावरण और पिछले बिल्ड में अंतर से बग का परिचय नहीं होगा और चूंकि आप CI सर्वर पर अन्य काम नहीं करते हैं, इसलिए यह कम संभावना है कि आप इसे तोड़ दें ।
Jan Hudec

@CedricMartin: जाहिर है कि अगर सीआई सर्वर गलत तरीके से कॉन्फ़िगर किया गया है, तो आप देखेंगे कि बिल्डरों ने डेवलपर बक्से पर किए गए कार्यों की तुलना में अलग व्यवहार किया है, क्योंकि डेवलपर्स हर समय खुद के लिए संकलन करेंगे। कुछ विशेष डेवलपर बॉक्स गलत तरीके से कॉन्फ़िगर किए जाने से अधिक आसानी से, क्योंकि अधिक लोग नोटिस कर सकते हैं।
Jan Hudec

6

मेरे लिए एक CI दिलचस्प हो जाता है अगर आपकी टीम में 1 से अधिक सदस्य हों।

आपको सीआई के बारे में सोचना बंद कर देना चाहिए क्योंकि "मेरे लिए परीक्षण चलाने वाला एक और पीसी"। सीआई एक परिभाषित और स्वचालित निर्माण प्रक्रिया और रिलीज प्रबंधन होने के बारे में ।

CI एकल आधिकारिक इकाई है जो आपके सॉफ़्टवेयर रिलीज़ को बनाता है। यदि यह CI पर निर्माण नहीं करता है तो ऐसा नहीं हुआ।

एक CI के साथ आपके पास सब कुछ स्वचालित करने के लिए प्रतिबंध हैं जो आपको सभी मैनुअल ट्वीक, हैक और शॉर्टकट दिखाएंगे जो आपके पास हैं और बस एक CI के साथ काम नहीं करते हैं और पहली जगह से बचा जाना चाहिए।

समस्याओं से बचा जाता है:

  • रिहाई के निर्माण के लिए कौन जिम्मेदार है
  • क्या यह व्यक्ति 24/7 उपलब्ध है
  • लेकिन यह मेरी मशीन सिंड्रोम पर बनाता है
  • हमारे द्वारा जारी किए गए संस्करण के बारे में सभी अस्पष्टता को हटाता है

लाभ (बस सभी का उल्लेख करने के लिए बहुत सारे):

  • स्वचालित संस्करण क्रमांकन
  • समस्या ट्रैकिंग एकीकरण
  • स्वचालित मीट्रिक पीढ़ी
  • स्थैतिक कोड विश्लेषण
  • स्वचालित तैनाती
  • मल्टी-स्टेज सेटअप

5

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

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

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

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

तो आप देखिए, मेरी राय में हर एक परियोजना को निरंतर एकीकृत होने से लाभ मिलता है। बात यह है कि, अब तक और हर एक CI सर्वर से मन-मुटाव की जटिलता के कारण, मुझे पता है कि लोगों ने वास्तव में छोटे / सरल प्रोजेक्ट्स पर CI प्रथाओं को बंद कर दिया था। क्योंकि, लोग आते हैं, बदसूरत, अति-जटिल, अंडर-डिलवरी, फूला हुआ सॉफ़्टवेयर कॉन्फ़िगर करने में खर्च करने की तुलना में बेहतर चीजें होती हैं।

मेरी यह वही समस्या थी, और इसने मुझे लगभग एक साल पहले से अपने खाली समय में Cintient विकसित किया। मेरा आधार इसे स्थापित करने, कॉन्फ़िगर करने और उपयोग करने के लिए सरल बनाना था, और इसे उन गुणवत्ता मैट्रिक्स पर वितरित करना था जो हर एक और बहुत अधिक विफल या कम करने वाले थे। तो, इस लंबे जवाब के बाद परियोजना के लिए GitHub लिंक (जो स्वतंत्र और खुला-स्रोत है, natch) इंगित करने का मेरा बेशर्म प्लग आता है। जाहिरा तौर पर इसके कुछ अच्छे स्क्रीनशॉट भी हैं। :-) https://github.com/matamouros/cintient

आशा है कि मैंने आपकी मदद की।

(नोट: ब्रायन ओकले की टिप्पणी के बाद संपादित, इस तथ्य पर कि मुझे बेहतर उत्तर बनाने के लिए अधिक समय लेना चाहिए था। मुझे भी लगता है कि वह सही थे।)


मैंने वोट दिया क्योंकि यह सवाल का जवाब नहीं देता, यह सिर्फ एक विज्ञापन है। आप को संबोधित कभी नहीं जब परोक्ष करने के अलावा अन्य प्रश्न के हिस्से के संकेत "अब, मेरे उपकरण के साथ"।
ब्रायन ओकले

मुझे उत्तर को संपादित करने में कुछ समय लगा, जैसा कि @ bryan-oakley द्वारा सुझाया गया है।
मैटामोरोस

@matamouros: संपादन पर अच्छा काम।
ब्रायन ओकले
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.