एक बहु भंडार वातावरण में पैकेज और संस्करण रणनीतियों


13

हम कई टीमों के साथ एक छोटी-ईश फर्म हैं जो अपने स्वयं के गिट रिपॉजिटरी का प्रबंधन करते हैं। यह एक वेब प्लेटफॉर्म है और प्रत्येक टीम की कलाकृतियों को रात के परीक्षणों के लिए दिन के अंत में तैनात किया जाता है। हम संस्करण और पैकेजिंग के आसपास की प्रक्रिया को औपचारिक बनाने की कोशिश कर रहे हैं।

प्रत्येक टीम की एक मास्टर शाखा होती है जहाँ वे दिन-प्रतिदिन विकास करते हैं। प्रत्येक टीम के गुणवत्ता आश्वासन सदस्य चाहते हैं कि उनकी टीम के बदलावों से कलाकृतियों को एक परीक्षण बिस्तर में तैनात किया जाए जहां सभी घटकों को शेफ द्वारा संयोजित किया जाता है। कलाकृतियाँ टारबॉल हैं लेकिन मैं उन्हें RPM में बदलना चाहता हूँ ताकि हम सोच सकें और संस्करणों के बारे में सही तरीके से जान सकें।

रिलीज की प्रक्रिया में प्रत्येक गिट रिपॉजिटरी के विकास शाखा (ज्यादातर मामलों में मास्टर) से एक रिलीज शाखा को काटना शामिल है। इसके बाद गुणवत्ता आश्वासन दिया जाता है जो कलाकृतियों के सेट पर परीक्षण और साइन-ऑफ चलाते हैं।

उदाहरण के लिए, यह संबंधित रिलीज़ शाखाओं के साथ एक विशिष्ट गिट रिपॉजिटरी है:

 0-0-0-0-0-0-0-0-0-0 (master)
   |           |
   0           0
 (rel-1)       |
               0
            (rel-2)

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

EDIT1: @ Urban48 के जवाब के जवाब में

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

हमारी सुविधा शाखाओं को हमेशा मास्टर से काट दिया जाता है और मास्टर के साथ विलय से पहले डेवलपर परीक्षण की कुछ मात्रा से गुजरना होता है, जिस पर वे CI-CD स्थिरता जांच से गुजरते हैं।

हॉटफ़िक्स को हॉटफ़िक्स शाखाओं (रिलीज़ शाखाओं से कट) पर बनाया जाता है और उत्पादन में न्यूनतम प्रभाव परीक्षण के साथ तैनात किया जाता है।

रिलीज़ और हॉटफ़िक्स शाखाओं के लिए हमारी संस्करण रणनीति सेवर का अनुसरण करती है। क्यूए चक्र के दौरान रिलीज शाखाएं जैसे संस्करणों के माध्यम से जाती हैं v2.0.0-rc1, v2.0.0-rc2और आखिरकार क्यूए साइन-ऑफ बनने के बाद v2.0.0

हम कभी-कभी छोटे फीचर्स के लिए रिलीज़ डेटेड करते हैं जो कि रिलीज़ होने वाली शाखाओं (और फिर मास्टर) में विलय हो जाते हैं जहाँ संस्करण बन जाते हैं v2.1.0। और हॉटफिक्सेस v2.1.1पैटर्न ग्रहण करते हैं ।

हालाँकि, यह सवाल इन शाखाओं के संस्करण के बारे में नहीं है। मैं इस संस्करण योजना को पूरी तरह से नहीं बदलना पसंद करूंगा। एकमात्र परिवर्तन विकास शाखा के बारे में आता है। गुरुजी। मैं CI-CD वातावरण में मज़बूती से कैसे संकेत दे सकता हूं कि कौन सा संस्करण मौजूद है जो उत्पादन में पिछली रिलीज़ को प्रदर्शित करता है। यह आदर्श रूप से स्मार्ट गिट टैगिंग के माध्यम से किया जाएगा, लेकिन ऐसा कुछ जो मास्टर शाखा को अत्यधिक टैग नहीं करता है।


क्यों नहीं जोड़ते हैं -अंक <build_number> विकास शाखाओं से बिल्ड में, और एक बार मास्टर / रिलीज़ शाखा से रिलीज़ होने के बाद बस xyz का उपयोग करें?
अर्बन ४

rcप्रत्यय से पहले क्या होगा ? यह major.minorविकास संस्करण तय करेगा । rcऔर बिल्ड नंबर केवल उसी के आधार पर प्राप्त किया जा सकता है। इसके अलावा rc, गुरु से कोई मतलब नहीं है क्योंकि हम कभी भी गुरु से मुक्त नहीं होते हैं। हम अपनी रिहाई के उम्मीदवारों को आज रिलीज चक्र के कुछ हिस्सों के रूप में रिलीज शाखाओं पर टैग करते हैं
tsps

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

जवाबों:


3

हम्म, अच्छा मेरे पास एक .net उदाहरण है जो प्रौद्योगिकी अज्ञेय हो सकता है।

मैं सिर्फ एक त्वरित सारांश करूँगा।

  • gitflow ब्रांचिंग रणनीति के साथ प्रति घटक git रेपो

  • सभी एक टीम शहर के निर्माण को ट्रिगर करने के लिए प्रतिबद्ध है

  • टीमइसीटी बिल्ड संस्करण को मैनुअल मेजर माइनर + असेंबली नंबर के साथ असेंबलीइन्फो.फॉ.के अर्थात 1.1.hotfix.build में संशोधन करता है

  • टीमसेट नूगेट प्रकाशित पुस्तकालयों के लिए एक ही संस्करण संख्या का उपयोग करके नगेट पैकेजिंग को ट्रिगर करता है

  • ऑक्टोपस डिप्लॉय्स ने मैन्युअल परीक्षण के लिए क्यूए का निर्माण किया (सभी परीक्षण पास मानकर)

  • यदि सब कुछ अच्छा है, तो ऑक्टोपस के माध्यम से मैन्युअल रूप से उत्पादन के लिए संस्करण को तैनात करें।

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

मुख्य बात यह है कि प्रत्येक निर्माण को कुछ केंद्रीय प्रक्रिया के माध्यम से विशिष्ट रूप से संस्करणित करना है।

फिर आप 'ओएमजी' के बजाय 'हम्म कौन से संस्करण चाहते हैं' की स्थिति में हैं, मुझे कौन सा संस्करण मिला है ??

संपादित करें: पुनः टिप्पणियाँ

बस उस प्रमुख बात को वास्तव में रेखांकित करना। तय करें कि कौन सी शाखा पूर्ण सॉफ्टवेयर का गठन करती है और संस्करण सभी इसके लिए प्रतिबद्ध है। केवल इस शाखा से संस्करणित सॉफ़्टवेयर को तैनात करें।

हालांकि मेरा विचार यह है कि आपको अपनी ब्रांचिंग रणनीति को संबोधित करने की आवश्यकता है।

  • संस्करण की सुविधा (या किसी भी देव) शाखाओं को नहीं।
  • वर्जन मास्टर करें
  • केवल मास्टर से संकुल का उपयोग करें

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

इसके अलावा, हमारे पास आज विकास शाखाओं पर संस्करण हैं। यह सिर्फ इतना है कि हमें हर प्रतिबद्ध को टैग करना होगा, कभी-कभी दो बार इस तरह से संस्करण बनाना होगा। मैं यह इंगित करके विकास का एक स्वच्छ दृश्य प्रदान करना चाहूंगा कि मौजूदा संस्करण v next+ के buildsसमान हैgit describe
tsps

अच्छी तरह से आप अभी भी निर्माण कर सकते हैं और संस्करण मास्टर के लिए कर सकते हैं। क्या वे सुविधा शाखाओं का उपयोग नहीं करते हैं?
इवान

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

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

1

मुझे वैकल्पिक वर्कफ़्लो की पेशकश करें, जो आपकी संस्करण समस्या को हल कर सकता है, या समाधान के लिए और अधिक तरीके सोचने में आपकी मदद कर सकता है।

पहले थोड़ा सा दर्शन ..
(मैं आपके वर्कफ़्लो के बारे में कुछ धारणाएँ बना रहा हूँ, कृपया मुझे गलत मानें तो सही करें)

  1. टेस्टों को शानदार तरीके से चलाया जाता है :

    maserसुविधा शाखा से बाहर शाखा, फिर क्यूए द्वारा परीक्षण के लिए एक कलाकृति में बदल दें।
    समस्या यह है : यदि परीक्षण विफल masterहो जाते हैं, तो टूट सकता है!

    दुष्प्रभाव:

    • यह डेवलपर्स पर भरोसा नहीं करता है master

    • चूंकि आप मास्टर से शाखाओं को जारी करने के लिए बाहर निकलते हैं, अगर पिछली रिलीज टूट गई है तो क्या होगा? यह आपकी नई सुविधा एकीकरण को रोकता है जब तक कि मास्टर फिर से तय न हो जाए।

    • जब बग को रिलीज शाखा में तय किया जाता है, तो masterमर्ज संघर्ष पैदा कर सकता है। (और हमें संघर्ष पसंद नहीं है)

  2. छोटे कोड विलय और सुधार :

    masterछोटे कोड या परिवर्तन जो किसी निश्चित विशेषता का हिस्सा नहीं हैं, जैसे सभी कोड को ट्रैक करना मुश्किल है ।

    दुष्प्रभाव:

    • डेवलपर को यकीन नहीं है कि उसे इस छोटे से सुधार को अभी या बाद में करना चाहिए।

    • मैं इस नए छोटे तय के रूप में अच्छी तरह से संस्करण चाहिए?

    • किसी भी समय यह स्पष्ट नहीं है कि masterशाखा की स्थिति क्या है , और वहां कौन सा कोड तैर रहा है

    • कुछ ने निर्माण को तोड़ दिया, जो नई सुविधा का हिस्सा नहीं है। और यह वास्तव में कठिन है कि यह कहां से आया है

काम के प्रवाह के लिए मेरा विचार इस प्रकार है:

यहाँ छवि विवरण दर्ज करें

masterनए फीचर डेवलपमेंट के लिए आप जैसे ब्रांच पहले से हैं। लेकिन अब इस नई बनाई गई शाखा से रिलीज़ होने के बजाय, इस सुविधा को चेरी-उठाया और releaseशाखा में विलय कर दिया ।

अब आप एक निश्चित रिलीज में क्या जा रहा है पर बेहतर नियंत्रण है।
अब इसके विकास संस्करणों और स्थिर संस्करणों को अलग करना आसान है।

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

संस्करण
सुविधा शाखा संस्करण कुछ नाम सम्मेलन जैसे उपयोग कर सकते हैं1.2.3-rc.12345

releaseशाखा में संस्करण केवल उपयोग करेंगे 1.2.3 ( 1.2.3> 1.2.3-rc.12345चिंता करने के लिए एक कम चीज भी)

यह वर्कफ़्लो ऊपर वर्णित समस्याओं को ठीक करता है, और अधिक।
इसमें साइन वर्जन रणनीति का भी प्रस्ताव है, और इस रिलीज चक्र का अधिकांश हिस्सा स्वचालित हो सकता है।

मुझे उम्मीद है कि यह आपको किसी तरह से मदद करेगा, मैं आपके साथ आने वाले किसी भी किनारे के मामलों पर खुशी से चर्चा करूंगा।

ps:
मैं अपनी अंग्रेजी, अपनी मुख्य भाषा के लिए माफी नहीं मांगता।


आपके विस्तृत उत्तर के लिए धन्यवाद। मैं मूल पोस्ट में EDITs के रूप में प्रतिक्रिया दूंगा क्योंकि टिप्पणी पट्टी पर्याप्त पाठ के लिए अनुमति नहीं देती है।
टीएसपी

0

आपकी प्रक्रिया बहुत जटिल है और टैग की थोड़ी संख्या प्राप्त करना अपरिहार्य लगता है।

दो विचार आते हैं:

  1. आप "मास्टर" शाखा के रूप में व्यवहार करते हैं जो हमारे पास आमतौर पर "विकसित" शाखा में होता है। यह संदेश शाखा को बहुत प्रदूषित करता है।

  2. जब QA उनकी नौकरी के साथ समाप्त हो जाता है तो आपके पास रिपोर्ट बनाने के लिए बिल्ड / CI सर्वर हो सकता है (उदाहरण के लिए। एक टेक्स्ट फ़ाइल) जो सभी रिपोज के टैग के साथ उपयोग में है। अब आपके पास संस्करणों के साथ एक फ़ाइल होगी जिसे रेपो में पोस्ट किया जा सकता है। फिर आप केवल रिलीज़ संस्करण के साथ शाखा को टैग करते हैं और यदि आप उन व्यक्तिगत घटकों के संस्करणों की जांच करना चाहते हैं तो आप रिपोर्ट की जांच कर सकते हैं।

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