क्या आप जूनियर प्रोग्रामर के साथ लगातार तैनाती कर सकते हैं?


11

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

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

लेकिन क्या जूनियर प्रोग्रामर्स के साथ ऐसा करना संभव है? शायद मुझे पुल-रिक्वेस्ट स्कीमा लागू करना होगा। यह इसे निरंतर तैनाती की तरह कम कर देगा (यह मेरा अनुमान है)?

मुझे उम्मीद है कि यह राय आधारित नहीं है और मैं आपके अनुभव को साझा करने पर भरोसा कर सकता हूं, धन्यवाद।

कृपया ध्यान दें, मैं सीआई के बारे में नहीं पूछ रहा हूं और न ही निरंतर डिलीवरी के बारे में। हमारे पास पहले से ही है। अब हम जो प्रयास कर रहे हैं, उसे निरंतर तैनाती देना है, जिसका अर्थ है कि कोड चेक-इन के बाद उत्पादन पर यह सब होना।


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 । और सच सीआई (कोई सुविधा / एकीकरण शाखाएं) के साथ आपको एक सप्ताह तक इंतजार नहीं करना चाहिए।
फरवरी को Dan Cornilescu

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

जवाबों:


16

क्यों नहीं? आपके द्वारा वर्णित चीजों में से कोई भी एक समस्या होगी कि आप निरंतर तैनाती का उपयोग करते हैं या नहीं। समस्या यह है कि ऐसा लगता है कि आप चिंतित हैं कि जूनियर्स एक भयावह गलती करेंगे। और उस गलती को किसी को पकड़ने से पहले उत्पादन में ले जाया जाएगा।

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


1
मुझे चिंता है कि सुविधा शाखाओं और पुल अनुरोधों का उपयोग करने से यह निरंतर तैनाती से कम हो जाता है। उन पहलुओं पर जो मैं हल करना चाहता हूं घटकों के बीच संगतता है। मुझे यकीन है कि मैं एक सेवा में एक बदलाव करने के बाद वे एक साथ काम करते हैं। जब हम कई बदलावों के बाद सभी को एकसाथ आगे बढ़ाते हैं तो मुझे तनाव महसूस होता है। यदि मैं मास्टर शाखा में शामिल होने से पहले परिवर्तनों की समीक्षा करता हूं तो मैं परिवर्तनों के क्रम को भ्रमित भी कर सकता हूं क्योंकि घटक अलग-अलग रिपोज में हैं।
डॉकर

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

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

3

यदि आपके पास स्वचालित परीक्षणों का एक अच्छा सेट है, तो निरंतर तैनाती अच्छी तरह से काम करेगी।

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

CatLight स्टेटस आइकन बनाएं

वे छोटी समस्याओं को ठीक कर देंगे जैसा कि वे होते हैं और आपके निरंतर वितरण को चालू रखते हैं।


3

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


1

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

एक सादृश्य के रूप में: क्या आप चाहेंगे कि आपका डॉक्टर अपने ज्ञान के सर्वश्रेष्ठ के लिए दवा का अभ्यास न करे क्योंकि वह युवा प्रशिक्षुता की त्रुटियों से डर जाएगा? डॉक्टर संभावित नुकसान से कैसे निपटते हैं?


1

बिग कोड ऑफ़ मड कोड-बेस के साथ पिछले अनुभव से, जो कई अनचाहे कनिष्ठ डेवलपर्स के हाथों स्वाभाविक रूप से कई वर्षों में विकसित हुआ, मैं इंगित करना चाहूंगा कि जब आप उन डेवलपर्स के साथ सीआई अभ्यास नहीं करते हैं तो क्या होता है।


संपादित करें / अपडेट करें : रूबरडैक की टिप्पणी के अनुसार; यह उत्तर मानता है कि एकीकरण के लिए आपका मर्ज लक्ष्य मूल्यांकन या रिलीज़ शाखा के बजाय एक विकास शाखा है।

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

1. जूनियर डेवलपर्स अपने सहकर्मियों या पर्यवेक्षक के साथ संवाद करने की कम संभावना रखते हैं

निरंतर एकीकरण केवल कोड में विलय का मामला नहीं है, यह एक समय है जब एक डेवलपर को अन्य हितधारकों के साथ बातचीत करने के लिए मजबूर किया जाता है।

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

यदि आप कनिष्ठ डेवलपर्स को अपने क्यूबिकल में बैठने की अनुमति देते हैं और बार-बार रिपोर्ट / समीक्षा के लिए पूछे बिना हफ्तों के लिए कोड पर दूर फेंक देते हैं, तो वे पूरी तरह से संचार से बचने की अधिक संभावना रखते हैं।

2. वे कोड जो वे पैदा कर रहे हैं, उन्हें अधिक कठोर समीक्षा की आवश्यकता है

क्या आपने कभी ऐसी चीज़ की समीक्षा की है जो इतनी बुरी थी कि आप चाहते थे कि आप इसे पहले ही उठा लें और इसे कभी भी लिखे जाने से रोकें? ऐसा बहुत होता है।

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

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

कई परियोजनाएं कीचड़ की एक बड़ी गेंद बन जाती हैं, क्योंकि खराब कोड का एक पूरा लोड तब लिखा जाता है जब कोई तब तक ध्यान नहीं देता जब तक कि बहुत देर नहीं हो जाती।

3. आपको कम-निश्चित होना चाहिए कि एक जूनियर डेवलपर या अन्य नए टीम सदस्य ने आवश्यकताओं को समझा है

कभी-कभी एक डेवलपर गलत समस्या के सही समाधान का निर्माण कर सकता है; यह एक दुखद है क्योंकि यह आम तौर पर सरल गलतफहमी के लिए नीचे है, जो बचने के लिए बहुत आसान होगा यदि केवल किसी ने प्रक्रिया में पहले सही सवाल पूछे थे।

फिर, यह एक समस्या है जो अनुभवहीन डेवलपर्स को प्रभावित करने की अधिक संभावना है जो पीछे धकेलने के बजाय "खराब" आवश्यकताओं को स्वीकार करने की अधिक संभावना रखते हैं और आवश्यकता के ज्ञान पर सवाल उठाते हैं।

4. वे सामान्य पैटर्न के साथ कम परिचित होने की संभावना रखते हैं, मौजूदा कोड की वास्तुकला के साथ, और प्रसिद्ध उपकरण और समाधान के साथ

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

फिर, अनुभवहीन डेवलपर्स के साथ इस तरह की बात होने की अधिक संभावना है, और मुद्दे को संबोधित करने का सबसे अच्छा तरीका नियमित समीक्षा सुनिश्चित करना है।

5. कोड कमिट / मर्ज के बीच लंबे समय से दोषों को पहचानना और ठीक करना कठिन हो जाता है

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

जाहिर है कि आपकी समग्र ब्रांचिंग रणनीति भी यहां चल रही है; आदर्श रूप से आपके सभी डेवलपर्स या तो अपनी शाखाओं में काम कर रहे होंगे, या फीचर शाखाओं (या दोनों) के भीतर, और मास्टर / ट्रंक से सीधे काम नहीं करेंगे।

मैंने ऐसी परिस्थितियाँ देखी हैं जहाँ पूरी टीमें सभी एक ही समय में सीधे मास्टर / ट्रंक में काम कर रही हैं, और यह CI के लिए एक भयानक वातावरण है, लेकिन सौभाग्य से मास्टर / ट्रंक से हर किसी को दूर करने का समाधान आम तौर पर व्यक्तिगत काम के लिए पर्याप्त स्थिरता प्रदान करता है आइटम / टिकट / आदि।

मास्टर / ट्रंक शाखा को तोड़ने के लिए किसी भी डेवलपर के लिए हमेशा "ओके" होना चाहिए , इस समझ के साथ कि विलय इस तरह के नियमित आधार पर होना चाहिए, कि परिवर्तन और दोषों को अधिक तेज़ी से पहचाना जाना चाहिए, और इसलिए अधिक तेज़ी से हल किया गया है। सबसे खराब दोष आम तौर पर वे होते हैं जो महीनों या वर्षों तक अनिर्धारित रहते हैं।


संक्षेप में; निरंतर एकीकरण / निरंतर तैनाती के मुख्य लाभ हैं:

  • आपकी टीम के बीच संवाद में सुधार होता है
  • आमतौर पर कोड की गुणवत्ता उच्च स्तर पर बनी रहती है
  • आवश्यकताएं कम होने या गलत व्याख्या किए जाने की संभावना है
  • वास्तुकला और डिजाइन के मुद्दों को और अधिक तेज़ी से पता लगाया जाना चाहिए,
  • दोषों का पहले चरण में पता लगने और तय होने की अधिक संभावना है

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


ओपी एक मॉडल के बारे में बात कर रहा है जहां उत्पादन में एक वास्तविक तैनाती को ट्रिगर करने में महारत हासिल है । तो, नहीं। उस मॉडल में मास्टर शाखा को तोड़ना ठीक नहीं है।
रबरडक

@RubberDuck अच्छी बात है, यह स्पष्ट करने के लिए एक टिप्पणी जोड़ी कि यह दृष्टिकोण एकीकरण परीक्षण के लिए है न कि नए कोड परिवर्तनों को सीधे एक उत्पादन शाखा में धकेलने के लिए।
बेन कॉटरेल

0

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

अपने DevOps के लड़के को ले जाएं और उसके साथ प्रक्रिया से गुजरें, साथ ही स्टैंडबाय पर एक वरिष्ठ देव को सिर्फ चीजों को देखने के लिए और अपने कोड रिव्यू (आप उन, सही करते हैं?) से जोड़कर देखें।

यदि आपकी चिंता यह है कि शाइट कोड से गुजरने वाला है, तो यह CI पर नहीं है और यह जूनियर्स पर नहीं है: यह आप पर है

इसलिए उन्हें बेहतर बनाने में मदद करें और चरण / ठेस कोड को तेज करने के लिए उपयोग करें। आप लंबे समय में खुद को धन्यवाद देंगे।


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