2011-12-02 21 views
24

मैं जो परियोजनाएं विकसित किया है और विभिन्न शाखाओं पर जारी किया जाता है, अर्थात् विकास और रिहाई की एक जोड़ी है वर्ज़निंग के लिए सर्वोत्तम प्रथाओं। प्रक्रिया बहुत अच्छी तरह से काम करती है लेकिन दुर्भाग्यवश इसमें कुछ कमीएं हैं और मैं सोच रहा हूं कि मेरी स्थिति में आवेदन करने के लिए एक बेहतर संस्करण योजना है या नहीं।Maven विभिन्न शाखाओं [विकास, गुणवत्ता आश्वासन/रिलीज]

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

<groupId>pl.cyfrowypolsat.process-engine</groupId> 
<artifactId>process-engine</artifactId> 
<version>D.16-SNAPSHOT</version> 

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

<groupId>pl.cyfrowypolsat.process-engine</groupId> 
<artifactId>process-engine</artifactId> 
<version>R.16-SNAPSHOT</version> 

तो फिर वहाँ एक रिलीज जो Maven रिलीज-प्लगइन के माध्यम से होता है रिहाई शाखा (जो एक रखरखाव टैग/त्वरित बग फिक्सिंग के लिए शाखा बनाता है) सॉफ्टवेयर के संस्करण के है: जेनकींस क्यूए आवेदन सर्वर से जिसके परिणामस्वरूप विरूपण साक्ष्य तैनात। (आर .16-एसएनएपीएसएचओटी => आर .16)

विकास और रिलीज शाखाओं को क्रमशः डी .16-स्नैपशॉट और आर .16-एसएनएपीएसएचओटी के रूप में संस्करणित किया जा रहा है। यह मैवेन रिपोजिटरी में कलाकृतियों को अलग करने की अनुमति देता है लेकिन विभिन्न मेवेन तंत्र के साथ एक समस्या पैदा करता है जो मानक मैवेन संस्करण शैली पर भरोसा करता है। और यह ओएसजीआई संस्करण भी तोड़ता है।

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

क्या 'विकास'/'उत्पादन' का एक मेवेन क्लासिफायरफायर एक उचित विकल्प होगा?

<groupId>pl.cyfrowypolsat.process-engine</groupId> 
<artifactId>process-engine</artifactId> 
<version>16-SNAPSHOT</version> 
<classifier>D</classifier> 
+0

http://stackoverflow.com/q/11413624/7581 पर देखें। ऐसा लगता है कि '16-आर-स्नैपशॉट' और '16-डी-स्नैपशॉट' जैसे संस्करण होने का सबसे अच्छा तरीका होगा। वर्गीकरण का उपयोग न करें। – itsadok

उत्तर

2

जहाँ तक मुझे पता है, एक रिलीज विरूपण साक्ष्य के लिए एक आम नामकरण विस्तार, बस विरूपण साक्ष्य के नाम होगा किसी भी सामान के बिना, केवल संस्करण निर्दिष्ट। एक विकास शाखा में एक ही आर्टिफैक्ट नाम होगा लेकिन स्नैपशॉट के साथ।

उदाहरण के लिए, twitter4j लें। रिलीज़ संस्करण के विरूपण साक्ष्य नाम है

twitter4j-2.5.5 उनके (अपने) विकास संस्करण

twitter4j-2.6.5-SNAPSHOT की

स्नैपशॉट

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

संपादित करें: अपना फ़ॉलो सवाल करने के लिए :

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

+5

बाबा, आपके उदाहरण में एक महत्वपूर्ण तत्व - शाखाएं गायब हैं। यह केवल तब अच्छा होता है जब आपके पास एक स्रोत (शाखा) होता है जिसे आप रिलीज़ कर रहे हैं (उदा। ट्रंक)। मेरे पर्यावरण में, क्यूए शाखा में सभी विकास परिवर्तन (इसलिए अलग-अलग शाखाएं) शामिल नहीं हैं जो कि क्यूए परीक्षण और जारी होने के लिए तैयार हैं। रिलीज इस क्यूए शाखा से बना है, इसलिए आर .16-एसएनएपीएसएचओटी रिलीज पर आर .16 बन गया है; जैसा कि आपने इसे ऊपर चित्रित किया है। –

+0

आपके संपादन के बाद, बाबा। यह एक शाखाकरण तर्क नहीं है, जो रिलीज उम्मीदवार और विकास संस्करणों को अलग कर रहा है। जैसा कि मैंने अपनी मूल पोस्ट (एक संपादन के रूप में) में उल्लेख किया है, यह सिर्फ http://martinfowler.com/bliki/FeatureBranch.html (विशेष, क्योंकि सभी सुविधाओं को एक साथ विकसित किया गया है) का एक विशेष मामला है। कुछ भी कल्पना नहीं, मुझे लगता है। प्रोत्साहन के शब्दों के लिए धन्यवाद। आपके लिए +1 –

0

मेवेन से रिलीज प्लगइन branching का समर्थन करता है। ऐसा लगता है कि शाखा आपके कोड के अगले संस्करण का समर्थन करने के लिए बनाई गई है।

व्यक्तिगत रूप से, मैं versions प्लग-इन का उपयोग करने के इच्छुक हूं, और स्पष्ट रूप से मेरे मैवेन प्रोजेक्ट के संस्करण संख्याओं को सेट करता हूं।

+1

मैं दोनों का उपयोग करता हूं, मार्क (मैं बगफिक्स रिलीज़ पर संस्करण प्लगइन के माध्यम से संस्करणों को बंप कर रहा हूं)। लेकिन मुझे डर है कि आपने मेरे प्रश्न को विवरण पर ध्यान नहीं दिया है। वैसे भी धन्यवाद। –

+0

ठीक है, मैं और अधिक व्याख्या करूँगा ... रिलीज प्लग-इन दस्तावेज़ पढ़ें और देखें कि यह शाखाकरण का समर्थन कैसे करता है। मेरी सलाह है कि उसी संस्करण की समानांतर प्रतियां ("डी", "आर", आदि) बनाकर मैवेन से लड़ने की कोशिश करना बंद करें। इसके बजाय एक शाखा बनाएं जो आपका अगला संस्करण बनने के लिए नियत है। उदाहरण के लिए संस्करण 1.0 की एक शाखा को 1.1-स्नैपशॉट कहा जाएगा। –

+2

मार्क, मेरे पास ऐसी शाखा है - 'शाखाएं/रिलीज' जिसमें "1.1-स्नैपशॉट" है। वह शाखा 1.1 के रूप में जारी की जा रही है। लेकिन मेरे पास एक सुविधा/विकास शाखा भी है, जिसे किसी भी तरह चिह्नित किया जाना चाहिए, क्योंकि अन्य सॉफ़्टवेयर को विकास संस्करण पर निर्भरता की आवश्यकता हो सकती है जो अभी तक निकटतम रिलीज के लिए निर्धारित नहीं है। मैं देव और क्यू शाखाओं से नहीं बच सकता क्योंकि मैंने प्रसन्ना को टिप्पणी में समझाया है। और क्या है, मैं मैवेन से लड़ नहीं रहा हूं, यह सेटअप काफी अच्छी तरह से काम करता है (मेवेन स्ट्रिंग संस्करणों का समर्थन करता है, आपको पता है; यह दस्तावेज है)। मैं बस ऐसी स्थिति को संभालने के लिए एक बेहतर तरीका ढूंढ रहा हूं। –

1

मुझे लगता है कि आप बस प्रक्रिया सकता है केवल दो प्रकार जहाँ तक Maven का संबंध है

  1. स्नैपशॉट (एक संस्करण संख्या है कि Maven भंडार करने के लिए तैनात किया जा सकता के साथ कर (सतत विकास में)
  2. Releasable द्वारा या उत्पादन रिहाई)

मैं अपने एक छोटे से शाखाओं में अलग ढंग से, आप पुनरावृत्ति/स्क्रम विकास मॉडल अपने कोड प्रकाशित करने योग्य/एक यात्रा/स्प्रिंट के अंत में शिप करने योग्य होना चाहिए को देखें, तो संभाल होगा

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