"कई छोटे VCS रिपोजिटरी" मॉडल के लिए "सभी उत्पादों के लिए एक बड़ा VCS रिपॉजिटरी" मॉडल से एक चिकनी संक्रमण कैसे प्राप्त करें?


15

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

इस सवालों के जवाब में, मैं देखना चाहूंगा:

  1. एक उत्पाद क्या है की एक कार्यशील परिभाषा देने का प्रयास, जो एक मौजूदा कोडबेस में वास्तव में उत्पादों को वितरित करने के लिए व्यावहारिक मानदंड देता है।

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

  3. इस तरह की योजना संतोषजनक है अगर यह बताती है कि इसे कैसे दरकिनार किया जाए

बंटवारे के मुद्दे

  1. स्वचालित परीक्षण प्रक्रियाएँ पहले से मौजूद मोनोलिथिक रिपॉजिटरी और स्प्लिट रिपॉजिटरी से कैसे संबंधित हैं?

  2. स्वचालित परिनियोजन प्रक्रियाएँ पहले से मौजूद मोनोलिथिक रिपॉजिटरी और स्प्लिट रिपॉजिटरी से कैसे संबंधित हैं?

  3. स्वचालित तैनाती प्रक्रियाओं के लिए कोड को स्वयं कहाँ संग्रहीत किया जाता है?

  4. कहाँ संग्रहीत , और रणनीतियों रहे हैं?

  5. यह कैसे सुनिश्चित करें कि एक डेवलपर को एक समय में केवल एक कोडबेस की आवश्यकता होती है (लेकिन अन्य कोडबेस से आर्टिफैक्ट्स का उपयोग संभव है)।

  6. Git-bisect जैसा टूल कैसे हो सकता है


सीमांत नोट: ब्लोस रिपॉजिटरी मॉडल पर VCS रिपॉजिटरी के प्रति उत्पाद होने के लाभ

एक विशिष्ट उत्पाद के लिए कोडबेस रखने वाले कई छोटे भंडार होने के बाद "ब्लोट रिपॉजिटरी" दृष्टिकोण पर निम्नलिखित लाभ हैं:

  1. एक ब्लोट रिपॉजिटरी के साथ एक उत्पाद के अस्थिर होने पर एक रिलीज को वापस रोल करना मुश्किल है, क्योंकि इतिहास अन्य उत्पाद इतिहास के साथ मिलाया जाता है।

  2. ब्लोट रिपॉजिटरी के साथ, प्रोजेक्ट इतिहास की समीक्षा करना मुश्किल है या छोटे रिपॉजिटरी के साथ, हम इस जानकारी को पढ़ने की अधिक संभावना रखते हैं। (यह GCS की तरह VCS के लिए विशिष्ट हो सकता है, जहां svn के विपरीत, हम चेकआउट सबट्रीज़ नहीं कर सकते हैं!)

  3. ब्लोट रिपॉजिटरी के साथ, जब हम विकसित होते हैं तो हमें बहुत अधिक शाखा-नृत्य करना पड़ता है। यदि हमारे पास एन रिपॉजिटरी है, तो हम एन शाखाओं पर समानांतर में काम कर सकते हैं, अगर हमारे पास केवल 1 रिपॉजिटरी है, तो हम केवल एक शाखा पर काम कर सकते हैं, या काम करने वाली प्रतियों का एक भार है, जिसे संभालना भी एक परेशानी है।

  4. कई छोटे रिपॉजिटरी के साथ, लॉग प्रोजेक्ट का हीट मैप देते हैं। उन्हें देव टीम में ज्ञान प्रसार के छद्म के रूप में भी इस्तेमाल किया जा सकता है: अगर मैंने 3 महीने से रेपो एक्स में प्रतिबद्ध नहीं किया, तो रेपो एक्स पर काम करने वाली टीम में मुझे सौंपना अच्छा हो सकता है ताकि मैं घटनाक्रम से अवगत रहूं उस घटक में।

  5. छोटे रिपॉजिटरी के साथ, एक घटक का स्पष्ट अवलोकन प्राप्त करना आसान है। यदि सब कुछ एक ही बड़े भंडार में जाता है, तो प्रत्येक घटक में ठोस मूर्तिकला नहीं होती है, और कोडबेस मिट्टी की बड़ी गेंद की ओर आसानी से बह सकता है ।

  6. छोटे रिपॉजिटरी हमें घटकों के बीच इंटरफेस पर काम करने के लिए मजबूर करते हैं। लेकिन जब से हम एक अच्छा कैप्युलेशन करना चाहते हैं, यह एक ऐसा काम है जो हमें वैसे भी करना चाहिए, इसलिए मैं इसे छोटे-छोटे शोधपत्रों के लिए एक लाभ के रूप में गिना जाऊंगा।

  7. कई छोटे रिपॉजिटरी के साथ, कई उत्पाद मालिकों के लिए यह आसान है।

  8. कई छोटे रिपॉजिटरी के साथ, सरल कोड मानकों को करना आसान है जो एक पूर्ण रिपॉजिटरी के लिए प्रासंगिक हैं और जो स्वचालित रूप से सत्यापित हो सकते हैं।


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

यह निश्चित रूप से है। :)
माइकल ले बारबियर ग्रुएनवाल्ड

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

1
यदि उत्पाद साझा करते हैं (प्लेटफ़ॉर्म / उत्पाद स्वतंत्र) कोड तो चीजें थोड़ी अधिक जटिल हो सकती हैं। या अगर उत्पादों के प्रति परिवार का सामान्य कोड है। ऐसा नहीं है कि विभाजन एक अच्छा विचार नहीं होगा, केवल भागों का प्रबंधन और फायदे और नुकसान की सूची किसी तरह अलग होगी।
डैन कॉर्निलेस्कु

2
मुझे लगता है कि git-bisect के साथ आपकी 6 वीं गोली कुछ याद कर रही है। मुझे आश्चर्य है कि यह अलग-अलग प्रश्नों में विभाजित नहीं होना चाहिए क्योंकि यह किताब के लिए कम या ज्यादा पूछ रहा है। जैसा कि एक उत्पाद की परिभाषा अत्यधिक व्यक्तिपरक है (और भिन्न हो सकती है) मुझे लगता है कि यह वास्तव में एसई साइट पर एक प्रश्न के लिए थोड़ा उच्च स्तर है। या तो बहुत व्यापक या बहुत अधिक राय आधारित है।
तेंसिबाई

जवाबों:


9

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

हालांकि, ऐसा लगता है कि हम में से कई इस तरह के संक्रमण के काम कर रहे हैं, जो रोमांचक हो सकता है, लेकिन एक ही समय में इतना निराशाजनक और दर्दनाक; और मैं अपने अनुभवों और विचारों को साझा करना चाहूंगा, पांडित्यपूर्ण नहीं होने की कोशिश कर रहा हूं, और सिर्फ इसलिए कि मैं इतना अच्छा इंजीनियर नहीं हो सकता, यह भी उबाऊ नहीं है।

डिज़ाइन

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

आत्मविश्वास

संक्रमण को अलग रखा जाना चाहिए, इस अर्थ में कि इतिहास का एक सुसंगत कटौती मौजूद होना चाहिए, जो संक्रमण को स्वयं और स्वयं को प्रदान करता है, बिना किसी अन्य परिवर्तन के (कई महीनों की तैयारी के बाद)। किस विश्वास के साथ कोई इसे स्वीकार करेगा और लाल बटन को धक्का देगा?

मेरा मतलब है कि नए वीसीएस ढांचे को समायोजित करने के लिए कोडबेस को बदलना होगा, और विकास के दौरान इसे विलय में रखना बहुत मुश्किल होगा। (इस मुद्दे के लिए रणनीतियों की सुविधा हो सकती है, मैं बाद में एक आम के बारे में बात करूंगा, जो विकास को थोड़ा सा समानांतर करने में मदद कर सकता है)।

वैसे मैं व्यवहार परीक्षण के साथ एकमात्र तरीका शर्त लगाता हूं, और पुराने कोड को नए कोडबेस के साथ सत्यापित करने के लिए व्यवहार परीक्षण का एक ही सूट लॉन्च किया जाना चाहिए। हम यहाँ पर अपेक्षित रूप से व्यवहार का सत्यापन नहीं कर रहे हैं, लेकिन यह कि संक्रमण व्यवहार में परिवर्तन नहीं करता है। असफल परीक्षण होने से अच्छी बात हो सकती है! अगर वे असफल होते रहे!

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

यदि ऐसा परीक्षण कोड जो भी याद आ रहा है, वह पहले लिखा जाएगा।

रणनीति

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

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

तकनीकी ऋण

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

Reaggregation

इस सब के बाद, आप अभी भी एक एकल रिपॉजिटरी जैसा दृश्य प्रदान कर सकते हैं जिसमें आप एक से अधिक एकल उत्पाद बना सकते हैं। किसी भी कारण से, यानी कर्व / अगली रिलीज, मल्टीब्रांड, ग्राहक बनाता है। Google रेपो जैसे उपकरण इस मामले में मदद कर सकते हैं। कभी खुद का इस्तेमाल नहीं किया, लेकिन मुझे पता है कि मुझे एक दिन की जरूरत होगी।

एकीकरण जांच

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

पुनश्च। यह एक मसौदा है, मेरी अंग्रेजी खराब है और मैं इसे एक दिन ठीक करूंगा

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