मैं बेहतर तरीके से समझने के लिए एक दृष्टिकोण का अध्ययन कर रहा हूं कि कैसे निरंतर एकीकरण वर्कफ़्लो एक सॉफ़्टवेयर डेवलपमेंट कंपनी में बेहतर तरीके से फिट बैठता है।
मैं कुछ इस तरह सोच रहा हूँ:
यह एक अच्छा कार्यप्रवाह होगा?
मैं बेहतर तरीके से समझने के लिए एक दृष्टिकोण का अध्ययन कर रहा हूं कि कैसे निरंतर एकीकरण वर्कफ़्लो एक सॉफ़्टवेयर डेवलपमेंट कंपनी में बेहतर तरीके से फिट बैठता है।
मैं कुछ इस तरह सोच रहा हूँ:
यह एक अच्छा कार्यप्रवाह होगा?
जवाबों:
आप कुछ इस तरह से हैं, लेकिन मैं आपके आरेख को कुछ हद तक विस्तारित करूंगा:
मूल रूप से (यदि आपका संस्करण नियंत्रण इसे अनुमति देगा, अर्थात यदि आप hg / git पर हैं), तो आप चाहते हैं कि प्रत्येक डेवलपर / देव जोड़ी की अपनी "व्यक्तिगत" शाखा हो, जिसमें एक एकल उपयोगकर्ता कहानी हो, जिस पर वे काम कर रहे हों। जब वे सुविधा को पूरा करते हैं, तो उन्हें "रिलीज" शाखा, एक केंद्रीय शाखा में धकेलने की आवश्यकता होती है। इस बिंदु पर, आप चाहते हैं कि देव को एक नई शाखा मिल जाए, अगले काम के लिए उन्हें काम करने की आवश्यकता है। मूल सुविधा शाखा को छोड़ दिया जाना चाहिए-इसलिए, इसमें किए जाने वाले किसी भी परिवर्तन को अलगाव में किया जा सकता है (यह हमेशा लागू नहीं होता है, लेकिन यह एक अच्छा प्रारंभिक बिंदु है)। एक पुरानी सुविधा शाखा पर काम करने के लिए एक देव रिटर्न से पहले, आपको अजीब मर्ज के मुद्दों से बचने के लिए, नवीनतम रिलीज शाखा में खींच लेना चाहिए।
इस बिंदु पर, हमें "रिलीज़" शाखा के रूप में एक संभावित रिलीज़ उम्मीदवार मिला है, और हम अपनी CI प्रक्रिया चलाने के लिए तैयार हैं (उस शाखा पर, जाहिर है कि आप प्रत्येक डेवलपर शाखा पर ऐसा कर सकते हैं, लेकिन यह बड़े देव टीमों में काफी दुर्लभ यह सीआई सर्वर को बंद कर देता है)। यह एक निरंतर प्रक्रिया हो सकती है (यह आदर्श रूप से मामला है, जब भी "रिलीज" शाखा को बदल दिया जाता है, तो सीआई को चलना चाहिए), या यह रात्रिकालीन हो सकता है।
इस बिंदु पर, आप एक बिल्ड चलाना चाहते हैं, और CI सर्वर से एक व्यवहार्य बिल्ड आर्टिफैक्ट प्राप्त कर सकते हैं (यानी ऐसा कुछ जिसे आप संभवत: तैनात कर सकते हैं)। यदि आप एक गतिशील भाषा का उपयोग कर रहे हैं, तो आप इस चरण को छोड़ सकते हैं! एक बार जब आप बन जाते हैं, तो आप अपने यूनिट टेस्ट को चलाना चाहते हैं, क्योंकि वे सिस्टम में सभी स्वचालित परीक्षणों की नींव हैं; उन्हें जल्दी होने की संभावना है (जो अच्छा है, क्योंकि सीआई का पूरा बिंदु विकास और परीक्षण के बीच प्रतिक्रिया पाश को छोटा करना है), और उन्हें एक तैनाती की आवश्यकता नहीं है। यदि वे पास हो जाते हैं, तो आप अपने एप्लिकेशन को परीक्षण सर्वर (यदि संभव हो) पर स्वचालित रूप से तैनात करना चाहते हैं, और आपके पास उपलब्ध कोई भी एकीकरण परीक्षण चला सकते हैं। एकीकरण परीक्षण एक यूनिट परीक्षण ढांचे (यानी "इकाई" का उपयोग करके स्वचालित UI परीक्षण, BDD परीक्षण या मानक एकीकरण परीक्षण हो सकते हैं)
इस बिंदु तक, आपके पास एक व्यापक व्यापक संकेत होना चाहिए कि क्या निर्माण व्यवहार्य है। अंतिम चरण मैं "रिलीज़" शाखा के साथ सामान्य रूप से सेटअप करूँगा, यह है कि यह रिलीज़ उम्मीदवार को स्वचालित रूप से एक परीक्षण सर्वर पर तैनात कर दे, इसलिए आपका क्यूए विभाग मैनुअल धूम्रपान परीक्षण कर सकता है (यह अक्सर प्रति-चेकिन के बजाय रात में किया जाता है ताकि परीक्षण चक्र में गड़बड़ी से बचने के लिए)। यह सिर्फ एक त्वरित मानव संकेत देता है कि क्या बिल्ड वास्तव में लाइव रिलीज के लिए उपयुक्त है, क्योंकि चीजों को मिस करना काफी आसान है यदि आपका टेस्ट पैक व्यापक से कम है, और 100% टेस्ट कवरेज के साथ भी कुछ ऐसा याद रखना आसान है जो आप कर सकते हैं स्वतः t (नहीं होना चाहिए) परीक्षण (जैसे कि गलत संरेखित छवि, या वर्तनी की गलती)।
यह वास्तव में, निरंतर एकीकरण और निरंतर तैनाती का एक संयोजन है, लेकिन यह देखते हुए कि एजाइल में ध्यान पहली श्रेणी की प्रक्रिया के रूप में दुबला कोडिंग और स्वचालित परीक्षण पर है, आप जितना संभव हो उतना व्यापक दृष्टिकोण प्राप्त करना चाहते हैं।
मैंने जिस प्रक्रिया की रूपरेखा तैयार की है वह एक आदर्श-केस परिदृश्य है, इसके कई कारण हैं कि आप इसके कुछ हिस्सों को क्यों छोड़ सकते हैं (उदाहरण के लिए, डेवलपर शाखाएं एसवीएन में संभव नहीं हैं), लेकिन आप इसका अधिक से अधिक उपयोग करना चाहते हैं। ।
जैसा कि स्क्रम स्प्रिंट चक्र इस में फिट बैठता है, आदर्श रूप से आप चाहते हैं कि आपकी रिलीज़ जितनी बार संभव हो, और स्प्रिंट के अंत तक उन्हें न छोड़ें, जैसा कि एक सुविधा के रूप में त्वरित प्रतिक्रिया के रूप में मिल रहा है (और एक पूरे के रूप में निर्माण) ) उत्पादन के लिए एक चाल के लिए व्यवहार्य है अपने उत्पाद स्वामी के लिए अपनी प्रतिक्रिया पाश को छोटा करने के लिए एक महत्वपूर्ण तकनीक है।
वैचारिक रूप से हाँ। एक आरेख हालांकि कई महत्वपूर्ण बिंदुओं को कैप्चर नहीं कर रहा है, जैसे:
आप आरेख के लिए एक व्यापक प्रणाली तैयार करना चाह सकते हैं। मैं निम्नलिखित तत्वों को जोड़ने पर विचार करूंगा:
सिस्टम को अपने इनपुट दिखाएं, जो डेवलपर्स को खिलाए जाते हैं। उन्हें आवश्यकताएं, बग फिक्स, कहानियां या जो भी कहें। लेकिन वर्तमान में आपका वर्कफ़्लो यह मानता है कि दर्शक को पता है कि उन इनपुट को कैसे डाला जाता है।
वर्कफ़्लो के साथ नियंत्रण बिंदु दिखाएं। जब कोई परिवर्तन ट्रंक / मुख्य / रिलीज-शाखा / आदि में अनुमति देता है ... तो क्या होता है? CIS पर कौन से कोडरट / प्रोजेक्ट बनाए गए हैं? क्या यह देखने के लिए एक चौकी है कि क्या निर्माण टूट गया था? स्टेजिंग / प्रोडक्शन में CIS से कौन रिलीज करता है?
नियंत्रण बिंदुओं से संबंधित पहचान कर रहा है कि आपकी शाखा पद्धति क्या है और यह इस वर्कफ़्लो में कैसे फिट होती है।
क्या कोई टेस्ट टीम है? वे कब शामिल या अधिसूचित किए जाते हैं? क्या CIS पर स्वचालित परीक्षण किया जा रहा है? कैसे टूट व्यवस्था में वापस खिलाया जाता है?
विचार करें कि आप इस वर्कफ़्लो को निर्णय बिंदुओं और आदानों के साथ एक पारंपरिक फ़्लोचार्ट में कैसे मैप करेंगे। क्या आपने उच्च स्तरीय स्पर्श बिंदुओं पर कब्जा कर लिया है जो आपके वर्कफ़्लो का पर्याप्त वर्णन करने के लिए आवश्यक हैं?
आपका मूल प्रश्न एक तुलना करने का प्रयास कर रहा है, मुझे लगता है, लेकिन मैं इस बात पर निश्चित नहीं हूं कि आप किस पहलू की तुलना कर रहे हैं। सतत एकीकरण में अन्य एसडीएलसी मॉडल की तरह ही निर्णय बिंदु हैं, लेकिन वे इस प्रक्रिया में विभिन्न बिंदुओं पर हो सकते हैं।
मैं "विकास स्वचालन" शब्द का उपयोग सभी स्वचालित निर्माण, प्रलेखन पीढ़ी, परीक्षण, प्रदर्शन माप और तैनाती गतिविधियों को शामिल करने के लिए करता हूं।
एक "विकास स्वचालन सर्वर" इसलिए एक समान है, लेकिन एक निरंतर एकीकरण सर्वर की तुलना में कुछ हद तक व्यापक है।
मैं सीआई-सर्वर पर अतिरिक्त कॉन्फ़िगरेशन की आवश्यकता के बिना, पोस्ट-कम हुक द्वारा संचालित विकास स्वचालन लिपियों का उपयोग करना पसंद करता हूं जो दोनों निजी शाखाओं और केंद्रीय विकास ट्रंक को स्वचालित करने की अनुमति देता है। (यह अधिकांश ऑफ-द-शेल्फ सीआई सर्वर GUIs के उपयोग को रोकता है जो मुझे पता है)।
पोस्ट-कमिट स्क्रिप्ट यह निर्धारित करती है कि शाखा की सामग्री के आधार पर कौन-सी स्वचालन गतिविधियाँ चलती हैं; या तो शाखा में एक निश्चित स्थान पर पोस्ट-कम कॉन्फ़िगरेशन फ़ाइल को पढ़कर, या रिपॉजिटरी में शाखा के पथ के एक घटक के रूप में एक विशेष शब्द (I / / ऑटो /) का पता लगाकर (Svn के साथ)।
(यह एचजी की तुलना में Svn के साथ स्थापित करना आसान है)।
यह दृष्टिकोण विकास टीम को और अधिक लचीला बनाने में सक्षम बनाता है कि वे अपने वर्कफ़्लो को कैसे व्यवस्थित करते हैं, जिससे सीआई को कम से कम प्रशासनिक ओवरहेड के साथ शाखाओं पर विकास का समर्थन करने की अनुमति मिलती है।
Asp.net पर निरंतर एकीकरण पर पदों की एक अच्छी श्रृंखला है जो आपको उपयोगी मिल सकती है, यह काफी जमीन और वर्कफ़्लो को कवर करती है जो कि ऐसा लगता है कि जैसा आप कर रहे हैं उसके साथ फिट है।
आपका आरेख सीआई सर्वर (इकाई परीक्षण, कोड कवरेज और अन्य मैट्रिक्स, एकीकरण परीक्षण या रात के निर्माण) द्वारा किए गए कार्य का उल्लेख नहीं करता है, लेकिन मुझे लगता है कि यह सब "निरंतर एकीकरण सर्वर" चरण में शामिल है। मैं इस बारे में स्पष्ट नहीं हूं कि सीआई बॉक्स केंद्रीय भंडार में वापस क्यों लाया जाएगा? जाहिर है कि इसे कोड प्राप्त करने की आवश्यकता है लेकिन इसे वापस भेजने की आवश्यकता क्यों होगी?
CI उन विषयों में से एक है जो विभिन्न विषयों द्वारा सुझाए गए हैं, यह (या XP) स्क्रैम करने के लिए अद्वितीय नहीं है, लेकिन वास्तव में मैं कहूंगा कि यह लाभ किसी भी प्रवाह के लिए उपलब्ध है, यहां तक कि गैर-फुर्तीले जैसे कि झरना (शायद गीला-चुस्त?) । मेरे लिए मुख्य लाभ तंग फीडबैक लूप हैं, आप बहुत जल्दी जानते हैं कि क्या आपने अभी-अभी कोड आधार के बाकी हिस्सों के साथ काम किया है। यदि आप स्प्रिंट में काम कर रहे हैं और आपके दैनिक स्टैंड-अप हैं तो सीआई सर्वर में निर्मित रातों से स्थिति, या मैट्रिक्स का उल्लेख करने में सक्षम होना निश्चित रूप से एक प्लस है और लोगों को फ़ोकस करने में मदद करता है। यदि आपका उत्पाद स्वामी बिल्ड की स्थिति देख सकता है - एक साझा क्षेत्र में एक बड़ा मॉनिटर जो आपके बिल्ड प्रोजेक्ट्स की स्थिति दिखा रहा है - तो आपने वास्तव में उस फीडबैक लूप को कस दिया है। यदि आपकी विकास टीम बार-बार (दिन में एक से अधिक बार और आदर्श रूप से एक घंटे से अधिक बार) कमिट कर रही है, तो आप जिन समस्याओं को हल करने के लिए एक लंबा समय लेते हैं, एक एकीकरण समस्या में भाग लेंगे, लेकिन अगर वे इसे करने के लिए स्पष्ट हैं सभी और आप जो भी उपाय कर सकते हैं, ले सकते हैं, उदाहरण के लिए टूटे हुए निर्माण से निपटने के लिए हर कोई रोक रहा है। अभ्यास में आप शायद कई असफल बिल्ड नहीं मारेंगे जो कि कुछ मिनटों से अधिक समय लेते हैं यह पता लगाने के लिए कि क्या आप अक्सर एकीकृत कर रहे हैं।
अपने संसाधनों / नेटवर्क के आधार पर आप विभिन्न अंत सर्वरों को जोड़ने पर विचार कर सकते हैं। हमारे पास एक CI बिल्ड है जो कि रेपो के लिए प्रतिबद्ध है और यह मानते हुए कि यह सभी परीक्षणों का निर्माण करता है और पास करता है, फिर इसे विकास सर्वर में तैनात किया जाता है ताकि देवता यह सुनिश्चित कर सकें कि यह अच्छी तरह से खेलता है (आप इसमें सेलेनियम या अन्य UI परीक्षण शामिल कर सकते हैं? )। हालांकि, हर कमिट एक स्थिर बिल्ड नहीं है, इसलिए स्टेजिंग सर्वर के लिए एक बिल्ड को ट्रिगर करने के लिए हमें रिविजन (हम मर्क्यूरियल का उपयोग करना होगा) जिसे हम बनाना और तैनात करना चाहते हैं, फिर से यह एक विशेष के साथ कमिट करके सभी स्वचालित और ट्रिगर होता है टैग। उत्पादन पर जाने के लिए एक मैनुअल प्रक्रिया है; आप इसे उतना ही सरल छोड़ सकते हैं जितना कि एक ट्रिक को बनाने के लिए मजबूर करना यह जानना है कि आप किस संशोधन / निर्माण का उपयोग करना चाहते हैं, लेकिन अगर आप संशोधन को उचित रूप से टैग करना चाहते थे तो CI सर्वर सही संस्करण की जांच कर सकता है और जो आवश्यक हो वह कर सकता है। आप उत्पादन सर्वर (एस) में परिवर्तन को सिंक करने के लिए एमएस डिप्लॉय का उपयोग कर सकते हैं, या इसे पैकेज कर सकते हैं और जिप को किसी व्यवस्थापक के लिए मैन्युअल रूप से तैनात करने के लिए तैयार कर सकते हैं ... यह इस बात पर निर्भर करता है कि आप उसके साथ कितने सहज हैं।
एक संस्करण के साथ-साथ आपको यह भी विचार करना चाहिए कि आप विफलता से कैसे निपट सकते हैं और एक संस्करण नीचे जा सकते हैं। उम्मीद है कि ऐसा नहीं होगा, लेकिन आपके सर्वरों में कुछ बदलाव हो सकता है, जिसका मतलब है कि यूएटी पर काम करना उत्पादन पर काम नहीं करता है, इसलिए आप अपना स्वीकृत संस्करण जारी करते हैं और यह विफल हो जाता है ... आप हमेशा उस दृष्टिकोण को ले सकते हैं जिसे आप पहचानते हैं बग, इसे ठीक करने के लिए उत्पादन के लिए कुछ कोड, कमिट, टेस्ट, परिनियोजन जोड़ें ... या आप उत्पादन के लिए अपनी स्वचालित रिलीज़ के आसपास कुछ और परीक्षण लपेट सकते हैं और यदि यह विफल रहता है तो यह स्वचालित रूप से वापस रोल करता है।
CruiseControl.Net बिल्ड को कॉन्फ़िगर करने के लिए xml का उपयोग करता है, TeamCity विजार्ड्स का उपयोग करता है, यदि आप अपनी टीम में विशेषज्ञों से बचने का लक्ष्य बना रहे हैं तो xml कॉन्फिगरेशन की जटिलता को ध्यान में रखना कुछ और हो सकता है।
सबसे पहले, एक चेतावनी: स्क्रम एक बहुत कठोर पद्धति है। मैंने ऐसे कुछ संगठनों के लिए काम किया है, जिन्होंने स्क्रम, या स्क्रैम-जैसे दृष्टिकोणों का उपयोग करने की कोशिश की है, लेकिन उनमें से कोई भी वास्तव में अपनी संपूर्णता में पूर्ण अनुशासन का उपयोग करने के करीब नहीं आया। अपने अनुभवों से मैं एक फुर्तीला-उत्साही हूँ, लेकिन एक (अनिच्छुक) स्क्रम-संशयवादी।
जैसा कि मैंने इसे समझा, स्क्रम और अन्य चुस्त तरीकों के दो मुख्य उद्देश्य हैं:
पहला (जोखिम प्रबंधन) उद्देश्य पुनरावृत्त विकास के माध्यम से प्राप्त किया जाता है; गलतियाँ करना और जल्दी से सबक सीखना, टीम को जोखिम को कम करने के लिए समझ और बौद्धिक क्षमता का निर्माण करने की अनुमति देता है और बैग में पहले से ही कम जोखिम वाले "ऑस्ट्रियर" समाधान के साथ कम जोखिम वाले समाधान की ओर बढ़ता है।
निरंतर दृष्टिकोण सहित विकास स्वचालन, इस दृष्टिकोण की सफलता में सबसे महत्वपूर्ण कारक है। जोखिम की खोज और पाठ-शिक्षा को तेज, घर्षण-मुक्त और भ्रमित करने वाले सामाजिक कारकों से मुक्त होना चाहिए। (लोग MUCH को तेजी से सीखते हैं जब यह एक मशीन होती है जो उन्हें बताती है कि वे किसी अन्य मानव के बजाय गलत हैं - जैसे कि केवल सीखने के तरीके से मिलते हैं)।
जैसा कि आप शायद बता सकते हैं - मैं भी परीक्षण-संचालित विकास का प्रशंसक हूं। :-)
दूसरा उद्देश्य विकास स्वचालन के साथ कम है, और मानव कारकों के साथ अधिक करना है। इसे लागू करना कठिन है क्योंकि इसे व्यवसाय के सामने के छोर से खरीदने की आवश्यकता होती है, जो औपचारिकता की आवश्यकता को देखने की संभावना नहीं है।
विकास स्वचालन की यहां एक भूमिका हो सकती है, जिसमें स्वचालित रूप से उत्पन्न प्रलेखन और प्रगति रिपोर्ट का उपयोग विकास टीम के बाहर हितधारकों को लगातार प्रगति के साथ अद्यतन रखने के लिए किया जा सकता है, और प्रगति की सूचना देने के लिए बिल्ड स्टेटस और पासिंग / फेल टेस्ट सूट दिखा रहे सूचना रेडिएटर का उपयोग किया जा सकता है फीचर डेवलपमेंट पर, स्क्रम संचार प्रक्रिया को अपनाने में सहायता (उम्मीद) करना।
तो, सारांश में:
वह आरेख जो आपने अपने प्रश्न का वर्णन करने के लिए प्रयोग किया था, वह प्रक्रिया का केवल एक हिस्सा है। यदि आप फुर्तीले / डरावने और सीआई का अध्ययन करना चाहते हैं, तो मैं तर्क दूंगा कि प्रक्रिया के व्यापक सामाजिक और मानव-कारक पहलुओं पर विचार करना महत्वपूर्ण है।
मुझे वही ढोल पीटकर समाप्त करना चाहिए जो मैं हमेशा करता हूं। यदि आप एक वास्तविक दुनिया की परियोजना में एक चुस्त प्रक्रिया को लागू करने की कोशिश कर रहे हैं, तो आपकी सफलता का सबसे अच्छा भविष्यवक्ता स्वचालन का स्तर है जिसे तैनात किया गया है; यह घर्षण को कम करता है, वेग बढ़ाता है और सफलता की राह प्रशस्त करता है।