बिग कोड ऑफ़ मड कोड-बेस के साथ पिछले अनुभव से, जो कई अनचाहे कनिष्ठ डेवलपर्स के हाथों स्वाभाविक रूप से कई वर्षों में विकसित हुआ, मैं इंगित करना चाहूंगा कि जब आप उन डेवलपर्स के साथ सीआई अभ्यास नहीं करते हैं तो क्या होता है।
संपादित करें / अपडेट करें : रूबरडैक की टिप्पणी के अनुसार; यह उत्तर मानता है कि एकीकरण के लिए आपका मर्ज लक्ष्य मूल्यांकन या रिलीज़ शाखा के बजाय एक विकास शाखा है।
- जाहिर है कि रिलीज और लाइव तैनाती के लिए कोड पर बहुत अधिक नियंत्रण रखने की आवश्यकता है; यदि कोई अलग उत्पादन शाखा नहीं है, तो मास्टर रिलीज़ शाखा के साथ-साथ एक मास्टर डेवलपमेंट ब्रांच (जो एकीकरण परीक्षण के लिए उपयोग की जाती है और कभी रिलीज के लिए नहीं) के लिए अपनी ब्रांचिंग / मर्जिंग रणनीति में बदलाव पर विचार करने के लायक होगा। यह ब्रेकिंग प्रोडक्शन कोड को जोखिम में डाले बिना CI और लगातार विलय के सभी लाभों को रखता है।
1. जूनियर डेवलपर्स अपने सहकर्मियों या पर्यवेक्षक के साथ संवाद करने की कम संभावना रखते हैं
निरंतर एकीकरण केवल कोड में विलय का मामला नहीं है, यह एक समय है जब एक डेवलपर को अन्य हितधारकों के साथ बातचीत करने के लिए मजबूर किया जाता है।
संचार महत्वपूर्ण है, और अति-सामान्यीकरण की इच्छा के बिना, यह एक सीखा कौशल है जो स्वाभाविक रूप से अनुभवहीन डेवलपर्स के लिए कम आता है, जो कि टीम के वातावरण में काम करने के अभ्यस्त हैं।
यदि आप कनिष्ठ डेवलपर्स को अपने क्यूबिकल में बैठने की अनुमति देते हैं और बार-बार रिपोर्ट / समीक्षा के लिए पूछे बिना हफ्तों के लिए कोड पर दूर फेंक देते हैं, तो वे पूरी तरह से संचार से बचने की अधिक संभावना रखते हैं।
2. वे कोड जो वे पैदा कर रहे हैं, उन्हें अधिक कठोर समीक्षा की आवश्यकता है
क्या आपने कभी ऐसी चीज़ की समीक्षा की है जो इतनी बुरी थी कि आप चाहते थे कि आप इसे पहले ही उठा लें और इसे कभी भी लिखे जाने से रोकें? ऐसा बहुत होता है।
आप खराब कोड को लिखे जाने से नहीं रोक सकते, लेकिन आप समय बर्बाद कर सकते हैं। यदि आप लगातार समीक्षा और विलय के लिए प्रतिबद्ध हैं, तो आप व्यर्थ समय के लिए गुंजाइश कम करते हैं।
सबसे खराब स्थिति यह है कि आप अपने स्वयं के लघु परियोजना पर कई हफ्तों के लिए अकेले एक जूनियर डेवलपर को छोड़ सकते हैं, और जब वे अंत में कोड की समीक्षा के लिए तैयार हो जाते हैं, तो उनके लिए पूरी गड़बड़ी फेंकने के लिए पर्याप्त समय शेष नहीं होता है दूर और फिर से खरोंच से शुरू।
कई परियोजनाएं कीचड़ की एक बड़ी गेंद बन जाती हैं, क्योंकि खराब कोड का एक पूरा लोड तब लिखा जाता है जब कोई तब तक ध्यान नहीं देता जब तक कि बहुत देर नहीं हो जाती।
3. आपको कम-निश्चित होना चाहिए कि एक जूनियर डेवलपर या अन्य नए टीम सदस्य ने आवश्यकताओं को समझा है
कभी-कभी एक डेवलपर गलत समस्या के सही समाधान का निर्माण कर सकता है; यह एक दुखद है क्योंकि यह आम तौर पर सरल गलतफहमी के लिए नीचे है, जो बचने के लिए बहुत आसान होगा यदि केवल किसी ने प्रक्रिया में पहले सही सवाल पूछे थे।
फिर, यह एक समस्या है जो अनुभवहीन डेवलपर्स को प्रभावित करने की अधिक संभावना है जो पीछे धकेलने के बजाय "खराब" आवश्यकताओं को स्वीकार करने की अधिक संभावना रखते हैं और आवश्यकता के ज्ञान पर सवाल उठाते हैं।
4. वे सामान्य पैटर्न के साथ कम परिचित होने की संभावना रखते हैं, मौजूदा कोड की वास्तुकला के साथ, और प्रसिद्ध उपकरण और समाधान के साथ
कभी-कभी एक डेवलपर समय के एक पूरे भार को पहिया को फिर से आविष्कार करने के लिए अनावश्यक रूप से खर्च करता है, क्योंकि वे नहीं जानते थे कि एक बेहतर समाधान भी मौजूद है। या वे एक गोल छेद में एक वर्ग खूंटी को हथौड़ा करने की कोशिश कर दिन बिता सकते हैं, बिना यह महसूस किए कि वे क्या गलत कर रहे हैं।
फिर, अनुभवहीन डेवलपर्स के साथ इस तरह की बात होने की अधिक संभावना है, और मुद्दे को संबोधित करने का सबसे अच्छा तरीका नियमित समीक्षा सुनिश्चित करना है।
5. कोड कमिट / मर्ज के बीच लंबे समय से दोषों को पहचानना और ठीक करना कठिन हो जाता है
जब कई हफ्तों के बाद एक बग उभर कर आता है, तो कोड में बदलाव के लायक कुछ हद तक मास्टर ब्रांच में विलय कर दिया गया है, इसलिए यह पहचानने की चुनौती है कि किस बदलाव के कारण बग अधिक कठिन हो सकता है।
जाहिर है कि आपकी समग्र ब्रांचिंग रणनीति भी यहां चल रही है; आदर्श रूप से आपके सभी डेवलपर्स या तो अपनी शाखाओं में काम कर रहे होंगे, या फीचर शाखाओं (या दोनों) के भीतर, और मास्टर / ट्रंक से सीधे काम नहीं करेंगे।
मैंने ऐसी परिस्थितियाँ देखी हैं जहाँ पूरी टीमें सभी एक ही समय में सीधे मास्टर / ट्रंक में काम कर रही हैं, और यह CI के लिए एक भयानक वातावरण है, लेकिन सौभाग्य से मास्टर / ट्रंक से हर किसी को दूर करने का समाधान आम तौर पर व्यक्तिगत काम के लिए पर्याप्त स्थिरता प्रदान करता है आइटम / टिकट / आदि।
मास्टर / ट्रंक शाखा को तोड़ने के लिए किसी भी डेवलपर के लिए हमेशा "ओके" होना चाहिए , इस समझ के साथ कि विलय इस तरह के नियमित आधार पर होना चाहिए, कि परिवर्तन और दोषों को अधिक तेज़ी से पहचाना जाना चाहिए, और इसलिए अधिक तेज़ी से हल किया गया है। सबसे खराब दोष आम तौर पर वे होते हैं जो महीनों या वर्षों तक अनिर्धारित रहते हैं।
संक्षेप में; निरंतर एकीकरण / निरंतर तैनाती के मुख्य लाभ हैं:
- आपकी टीम के बीच संवाद में सुधार होता है
- आमतौर पर कोड की गुणवत्ता उच्च स्तर पर बनी रहती है
- आवश्यकताएं कम होने या गलत व्याख्या किए जाने की संभावना है
- वास्तुकला और डिजाइन के मुद्दों को और अधिक तेज़ी से पता लगाया जाना चाहिए,
- दोषों का पहले चरण में पता लगने और तय होने की अधिक संभावना है
इसलिए यदि आप अपने कनिष्ठ डेवलपर्स के साथ सीआई का अभ्यास नहीं कर रहे हैं, तो आप बहुत सारे महत्वपूर्ण अनावश्यक जोखिम स्वीकार कर रहे हैं, क्योंकि ये आपकी टीम के सदस्य हैं जिन्हें बाकी की तुलना में इसकी आवश्यकता है।
it is more scary to wait a week to deploy all micro services at once to make sure that everything works together, than to strictly enforce api versioning, write lots of automatic tests (...), and auto deploy to production as soon as your commit passes as tests on stage
- यह राय आधारित है;) एक अखंड दृष्टिकोण के साथ स्वतंत्र सेवा परिनियोजन के साथ सफलता सुनिश्चित करने के लिए IMHO बहुत अधिक कठिन है: softwareengineering.stackexchange.com/a/342346/187812 । और सच सीआई (कोई सुविधा / एकीकरण शाखाएं) के साथ आपको एक सप्ताह तक इंतजार नहीं करना चाहिए।