हम अपने प्रोडक्शन रिलीज़ में हर दूसरे सप्ताह में केवल रेडी-टू-टू-रिलीज़ फीचर्स कैसे शामिल कर सकते हैं?


12

मैं एक काफी बड़ी चुस्त टीम पर एक सॉफ्टवेयर डेवलपर हूं (हमारे पास आठ डेवलपर्स सक्रिय रूप से एक कोड रिपॉजिटरी में बदलाव कर रहे हैं)। हर दो सप्ताह में, हम अपने सॉफ़्टवेयर के नए संस्करण को उत्पादन में धकेल देते हैं। यहाँ हमारे वर्तमान कार्यप्रवाह है:

  • एक नया कार्य शुरू करते समय, डेवलपर्स मुख्य विकास शाखा (हम git का उपयोग करते हैं) से एक "सुविधा शाखा" बनाते हैं और इस नई शाखा से काम करते हैं
  • एक बार जब कोई डेवलपर अपने काम पर काम खत्म कर लेता है, तो वे अपनी सुविधा शाखा का विकास शाखा में वापस विलय कर देते हैं
  • डेवलपर विकास शाखा को QA शाखा में विलय कर देता है।
  • एक बिल्ड QA शाखा से चालू होता है। इस बिल्ड का आउटपुट हमारे क्यूए वातावरण में तैनात है ताकि परीक्षकों को अपना परीक्षण शुरू करने की अनुमति मिल सके।

हमारे परीक्षकों के लिए इन नई विशेषताओं के साथ समस्याओं का पता लगाना काफी सामान्य है जिन्हें QA शाखा में विलय कर दिया गया है। इसका मतलब यह है कि किसी भी समय, क्यूए वातावरण में कई नई विशेषताएं शामिल हैं - कुछ परीक्षण किए गए और बग-मुक्त, और कुछ टूटे हुए। यह जारी करना मुश्किल बनाता है क्योंकि यह दुर्लभ है कि क्यूए का निर्माण एक उत्पादन-तैयार स्थिति में है।

इसे कम करने के लिए, हम "क्यूए फ्रीज" शुरू करने की कोशिश कर रहे हैं, जिसका अर्थ है कि डेवलपर्स रिलीज से कुछ दिन पहले हमारी विकास शाखा को क्यूए शाखा में विलय नहीं करते हैं। QA वातावरण में बग फिक्स QA शाखा पर सीधे किए जाते हैं और विकास शाखा में विलय कर दिए जाते हैं। सैद्धांतिक रूप से, यह क्यूए से बाहर नई, टूटी सुविधाओं को रखता है जबकि अभी भी हमें क्यूए में पहले से ही मुद्दों को ठीक करने की अनुमति देता है।

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

क्या यह सुनिश्चित करने का एक बेहतर तरीका है कि हम हर दूसरे सप्ताह अपनी रिलीज़ के लिए एक साफ निर्माण करें?


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

1
हमें यह सटीक समस्या थी। इसका उत्तर है क्यूए अपनी शाखा बनाएँ। वे मुख्य को फ्रीज नहीं करते हैं। एक बार रिलीज होने के बाद ब्रांच को वापस टैग और डिलीट कर दिया जाता है । साथ ही सांस लेने वाला कमरा क्यूए है जो मामले के आधार पर किसी मामले में इस शाखा में विलय करने की अनुमति दे सकता है। लेकिन सामान्य कार्य सामान्य रूप से जारी है
रिचर्ड टिंगल

2
विषय "द्वि-साप्ताहिक" से दूर जाने के लिए एक खतरनाक शब्द माना जाता है । कुछ लोगों को लगता है कि इसका मतलब है कि सप्ताह में दो बार, दूसरों को हर 2 सप्ताह में
रिचर्ड टिंगल


@JBKing उपरोक्त सभी से बहुत ज्यादा। मैं कहूंगा कि सबसे आम बात यह है कि परीक्षक नई सुविधा में बग ढूंढता है या यह कि नया फीचर नए फीचर से संबंधित प्रतिगमन बग का कारण बनता है।
नाथन फ्रेंड

जवाबों:


9

इसमें कुछ समस्याएं तैर रही हैं जो उन मुद्दों का कारण बन रही हैं जिन्हें आप अनुभव कर रहे हैं।

पहली लंबी चलने वाली क्यूए शाखा है। एक लंबी चलने वाली शाखा का होना, जो विकास मेनलाइन के समानांतर है, भ्रम का एक स्रोत हो सकता है क्योंकि ऐसे विभिन्न प्रयास हैं जिन्हें क्यूए शाखा और मेनलाइन दोनों में दोहराने की आवश्यकता है। इसका मतलब यह है कि या तो आप क्यूए शाखा में फिक्स में जांच कर रहे हैं जिसे मेनलाइन में विलय करना होगा (बुरी चीज नहीं), या आप मेनलाइन में जांच कर रहे हैं जो क्यूए शाखा में विलय हो जाता है (संभावित बग का स्रोत) ।

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

इसके बाद, आपको ऐसी भूमिकाएँ मिली हैं, जो आप पर लागू हो रही हैं। इसका मतलब है कि पैकेजिंग की भूमिका (इस पर बाद में) पर्याप्त रूप से अलग नहीं हो रही है।

में Git प्रवाह मॉडल, रिलीज शाखा विकास से branched है ( नहीं विकास गुणवत्ता आश्वासन के लिए विलय) और सभी सुधारों को रिलीज शाखा में जाँच कर रहे हैं और फिर वापस विकास शाखा में विलय कर दिया।

ब्रांचिंग के दर्शन के कुछ उन्नत एससीएम ब्रांचिंग रणनीतियों में पाया जा सकता है (मैं एक उत्कृष्ट पढ़ने के लिए मानता हूं)। यह उन भूमिकाओं पर केंद्रित है जो प्रत्येक शाखा को लग सकती हैं। रिलीज शाखा पैकिंग की भूमिका पर ले जाती है।

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

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

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


"रिलीज यहाँ जाना" को "वर्किंग" कहा जाता है।
रैंडमयूएस

10

समस्या मुझे प्रतीत होती है कि आपके पास एक ही QA शाखा है।

प्रत्येक रिलीज के लिए, प्राथमिक विकास ट्रंक / मास्टर से एक अलग क्यूए शाखा बनाएं । फिर उस शाखा पर सुविधाओं के लिए बग्स के लिए केवल फिक्स में विलय - कभी नई सुविधाएँ नहीं। QA की उस शाखा का परीक्षण करें।

इस तरह, "फ्रीज" काफी स्पष्ट है- यह शाखा नाम में है। तुम कुछ का उपयोग कर सकते हैं, मुझे पता है release/26/10/2015,। फिर यह स्पष्ट है कि किसी को भी इसके बाद नई सुविधाओं में विलय नहीं किया जाना चाहिए।

यह विशेष रूप से उपयोगी है यदि आप फ्रीज होने तक शाखा को कांटा भी नहीं करते हैं। लोग किसी भी समय मास्टर में विलय कर सकते हैं, यह सिर्फ इस रिलीज का हिस्सा नहीं होगा अगर यह परीक्षण के लिए समय पर नहीं किया जाता है।

एक लंबे समय तक चलने वाली क्यूए शाखा नहीं है, बस परेशानी के लिए भीख माँग रहा है। प्रत्येक रिलीज के लिए मुख्य विकास शाखा से कांटा और उस शाखा क्यूए।


1
एक शाखा जिसका नाम फ्रीज़ की समय सीमा की याद दिलाता है, मुझे (+1) एक बहुत अच्छा विचार लगता है जब तक कि डेवलपर्स अपूर्ण सुविधाओं पर काम करना जारी नहीं रखते हैं और इसे "बग फिक्सिंग" कहते हैं।
जियोर्जियो

4

आप नीचे देखे गए विकास-मुख्य-उत्पादन शाखा मॉडल के लिए कुछ हद तक मैप कर रहे हैं। MAIN के ऊपर के क्षेत्र को विकास क्षेत्र कहा जाता है। MAIN के नीचे का क्षेत्र उत्पादन क्षेत्र है।

विकास-मुख्य-उत्पादन शाखा मॉडल

इस मॉडल की मुख्य बातें जो मैं आपके लिए प्रासंगिक मानता हूं:

  • आपके देवों को अपने DEV शाखाओं में अक्सर (2-3 बार एक सप्ताह में) MAI से अग्रेषित (FI) (FI = मर्ज को दूर करने) की आवश्यकता होती है ताकि यह सुनिश्चित हो सके कि उनके नवीनतम परिवर्तन हमेशा नवीनतम समग्र विकास पर विचार करें।
  • आपके देवों को TEST शाखा में केवल इंटीग्रेट (RI) (RI = मर्ज की ओर) को उल्टा करने की आवश्यकता होती है, जब वे एक सुविधा पूर्ण मील के पत्थर तक पहुँच चुके होते हैं, जिसे वे QA को एक्सपोज़ करना चाहते हैं और जिसके लिए वे शीघ्र सुधार प्रदान करने के लिए तैयार होते हैं क्यूए प्रतिक्रिया के लिए प्रतिक्रिया। फिक्स को TEST शाखा पर और तुरंत FI को उनकी DEV शाखा में किया जाएगा।
  • MAIN में किसी भी DEV शाखा से कभी RI नहीं
  • हमेशा टेस्ट में मुख्य शाखा से आरआई, विशेष रूप से जब आपका क्यूए टेस्ट की गुणवत्ता को ठीक मानता है। MAIN में विलय के लिए एक उच्च गुणवत्ता की सीमा रखें। बहुत कम से कम, आपके उत्पाद प्रबंधक को हमेशा आपके उत्पाद के कार्यशील संस्करण को MAIN में नवीनतम प्रतिबद्ध से प्रदर्शित करने में सक्षम होना चाहिए।
  • केवल आवश्यकतानुसार उत्पादन क्षेत्र में शाखाएँ बनाएँ। आपके बिल्ड सर्वर को हमेशा सभी शाखाओं को टैग करना चाहिए, जिसमें विकास क्षेत्र के लोग भी शामिल हैं, और किसी भी बिल्ड / रिलीज के स्रोत को उस शाखा की परवाह किए बिना हर समय पहचाना जाना चाहिए।
  • उत्पादन के लिए केवल MAIN या उत्पादन क्षेत्र से रिलीज़ करें। यदि बाद में आपको एक सटीक रिलीज़ किए गए संस्करण के लिए फ़िक्स प्रदान करने की आवश्यकता होती है (यानी आप केवल MAIN से नवीनतम संस्करण नहीं दे सकते हैं), तो फ़ॉल्ट की आवश्यकता होने पर फ़ाइनल रिलीज़ के मुख्य टैग से उत्पादन क्षेत्र में एक शाखा बनाएँ। हॉटफ़िक्स शाखा पर समस्या को हमेशा ठीक करें और फिर तुरंत मुख्य और FI में परीक्षण में आरआई करें।

मुझे संदेह है कि आपको समस्या है क्योंकि:

  • आपके देवता RI TEST कोड में है जो फीचर-मील का पत्थर पूरा नहीं है
  • QA से हरी बत्ती प्राप्त किए बिना आपके देवता RI में परीक्षण करते हैं (अर्थात QA उस नियंत्रण में नहीं है जो TAT में अंतःक्षिप्त हो जाता है)
  • जब QA TEST पर बग की रिपोर्ट करता है, तो आपके देवता इसे अपनी DEV शाखा पर ठीक कर लेते हैं और फिर TEST में RI कर देते हैं। यह एक प्रमुख खराब अभ्यास है क्योंकि मर्ज हमेशा अन्य अपूर्ण देव बकवास में लाएगा। उन्हें इसे हमेशा TEST पर और उसके बाद FI को अपनी DEV शाखा में ठीक करना चाहिए। यदि यह TEST पर ठीक नहीं होता है, तो उन्होंने पहली जगह में कुल बकवास दिया और आपको बड़ी समस्याएं हैं।
  • आपके देवों को अक्सर टीईएस से पर्याप्त नहीं मिलता है और इसलिए जब भी वे वहां पहुंचते हैं तो वे टेस्ट को अस्थिर कर देते हैं। यह एक ठीक कला संतुलन है जो कितनी बार एफआई को डीईवी में भेजती है। इसे बहुत अधिक स्थगित करें और यह प्रसव से ठीक पहले बेहद महंगा और जोखिम भरा होगा, जिसे आप कभी नहीं चाहते हैं। यदि ऐसा होता है तो आप भी अक्सर ऐसा करते हैं और यदि आप उस समय में TEST में अन्य लोगों द्वारा दिए गए कार्य के साथ बहुत अधिक ओवरलैप करते हैं तो आपको कोई वास्तविक देव कार्य नहीं मिलता है।

2

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

आपके SCM शाखा मॉडल के बावजूद, मेरा सुझाव है कि आप निम्नलिखित में से एक या दोनों का प्रयास करें:

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

1

एक बहुत ही सरल उपाय जो मैंने देखा है कि एक टीम का काम आपकी तुलना में थोड़ा बड़ा है, हर किसी के पास काम करना और एक ही शाखा से काम करना है।

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

स्पष्ट रूप से किसी भी दृष्टिकोण के लिए पेशेवरों और विपक्ष हैं, मैं इसे एक विकल्प के रूप में प्रस्तुत करता हूं जरूरी नहीं कि 'सबसे अच्छा तरीका' हो।


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

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

1

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

इस शाखा पर एकीकरण परीक्षण हो सकता है ताकि बग को ढूंढने के लिए वर्तमान में बग ढूंढे जा सकें, कीड़े को मूल शाखा पर तय किया जा सके और फिर से फिर से विलय किया जा सके, और जब तक इस शाखा पर सीधे या बग को ठीक नहीं किया जा सकता है (मैं सलाह देता हूं पूर्व)। एक बार जब इसका मूल परीक्षण लोड हो जाता है, तो इसे 'उपयोगकर्ता चिपचिपी उंगलियों और वे-किया-क्या?' के लिए QA को भेजा जा सकता है। परिक्षण।

तो इस दृष्टिकोण को क्यूए शाखा को टूटी हुई विकास सुविधाओं से बचाने के लिए डिज़ाइन किया गया है - चाहे ऐसा इसलिए हो क्योंकि इस सुविधा को पर्याप्त रूप से कोडित नहीं किया गया था या क्या अप्रत्याशित एकीकरण समस्याएँ नहीं थीं। एकीकरण परीक्षण पास करने वाली केवल देव शाखाओं को QA में पदोन्नत किया जाता है।

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