2011-03-22 16 views
5

हम अब कुछ महीनों के लिए Mercurial का उपयोग कर रहे हैं और यह हमारी तैनाती प्रक्रिया पहले से ही एक एलओटी में सुधार हुआ है। यह एक अच्छा हिस्सा है।Mercurial - क्या मैं इसे बेहतर कर सकता हूं?

हमारे पास जो सिस्टम है, वह काम कर रहा है लेकिन यदि आप सावधान या दौड़ नहीं रहे हैं तो यह अभी भी त्रुटि प्रवण है। यह मैं सोच छोड़ अगर वहाँ स्थितियों से उसका सुधार सकता है या नहीं है ... शायद हम ट्रैक :)

हमारे वातावरण पूरी तरह से बंद कर रहे हैं से मिलकर बनता है:

  • स्थानीय विकास कार्य केंद्र (प्रत्येक निर्माता)
  • विकास सर्वर (होस्टिंग डीबी & केंद्रीय भंडार)
  • स्वीकृति सर्वर (कहाँ क्यूए किया जाता है)
  • एक मचान सर्वर
  • +०१२३५१६४१० (हम रिलीज शाखा कहाँ मंच, हम तो लाइव प्रणालियों के लिए लड़ी)

कारण पर एक छोटी सी पृष्ठभूमि कारण है कि हम बंद:

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

नामित शाखाओं और आसान विलय के साथ Mercurial यह हमारे लिए हल करता है। इसलिए यह नहीं जानना कि हम क्या उम्मीद कर सकते हैं।

पहले हम अपने उत्पादन स्रोत साफ साफ मृत फ़ाइलों प्रूनिंग, आदि

हम FTP'd कि मचान पर और के रूप में "डिफ़ॉल्ट" यह हमारा नया भंडार बना दिया है, यह हमारी स्थिर शाखा करने के लिए तैयार होना था हर समय तैनात किया जाना चाहिए।

बाद में, हमने विकास सर्वर पर hg clone किया और प्रत्येक डेवलपर hg clone विकास डिफ़ॉल्ट शाखा से था।

स्वीकृति पर जहां हम क्यूए करते हैं, हमने विकास सर्वर की डिफ़ॉल्ट शाखा के hg clone किया था।

इस बिंदु पर हमारे पास हर जगह कोड की एक स्थिर प्रति है, हर कोई शुरू करने के लिए उत्सुक है!

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

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

hg pull -b default #synch up 
hg update default 
hg branch {newFeature} #newFeature completely isolated from other changes. 

*work on {newFeature} 

ओह नहीं! एक दोष! यह वर्तमान में काम कर रहा है उससे संबंधित नहीं है, इसे {bugFix111} कहें। यह मेरी सुविधा के एक स्वतंत्र शाखा के लिए कॉल करने के लिए प्रतीत होता है; अद्यतन डिफ़ॉल्ट पर वापस जाओ। यह एक दूसरे से नया फीचर और बगफिक्स 111 अलग करेगा और प्रत्येक डिफ़ॉल्ट रूप से लाइव पर जा सकते हैं क्योंकि वे डिफ़ॉल्ट पर आधारित होते हैं।

hg update default 
hg pull -u 
hg branch {bugFix111} 

एक बार काम कहते हैं पर पूरा हो गया है {bugFix111}

hg push -F {bugFix111} #send our fix to the main central repo on dev. 

जाओ स्वीकृति के लिए:

hg pull -b {bugFix111} #pull the fix from the central repo (dev). 
hg merge {bugFix111} #merge the code in the default QA branch. 
hg commit -m "Merging {bugFix111} into default" 

*QA sign off on the fix 

हम स्वीकृति बंद शाखा है - डिफ़ॉल्ट क्यूए जगह ले रहे थे और रिलीज करें जहां हम सामान को मर्ज करते हैं क्योंकि यह हस्ताक्षरित हो जाता है।

hg update release 
hg merge {bugFix111} #fix is now ready to go live 
hg commit -m "Merging {bugFix111} into release" 

मचान पर:

hg pull -b release {PATH TO ACCEPTANCE REPO} 
hg merge release 
hg commit -m "Merging {bugFix111} into staging default" 
hg tag release{date} 
*robocopy to live 
*run task that pull from staging to dev so that they synch up again. 

यह हमारे लिए काम कर रहा है और के रूप में यह एक हवा सिर्फ स्थिर रिलीज शाखा लड़ी करने के लिए कुछ तैनाती समय तक सहेज।

मुद्दे

हम क्या देखा है है:

  • यह एक मर्ज मूर्ख करने के लिए जब रिलीज पर दूसरी बार विलय आसान है, इस प्रवाह के खिलाफ लग रहे हैं। क्यूए साइन ऑफ के बाद हम इसे तोड़ सकते हैं।

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

  • हम इसे कुछ गलत पर रिलीज विलय करके पूरी तरह से उड़ा सकते हैं, उदा। जब आप स्वीकृति पर डिफ़ॉल्ट पर होते हैं तो एचजी विलय रिलीज पूरी तरह से इसे ओवरराइट करता है।

  • अगर हम एक नई शाखा शुरू करने से पहले खींचना भूल जाते हैं तो हम गलत आधार से काम कर रहे हैं।

  • कुछ अन्य विषमताएं लेकिन ये सबसे बड़ी बाधाएं हैं।

मुझे पता है यह एक लंबी पोस्ट है, लेकिन उम्मीद है कि उत्तर की तरह मुझे अपनी कंपनी में एक सभ्य कार्यप्रवाह स्थापित करने के लिए कोशिश कर रहा है अन्य मर्क्युरियल newbies के लिए मदद मिलेगी।

उत्तर

1

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

+0

क्योंकि किसी भी समय क्यूए शाखा में सुविधा 1, फीचर 2, ..., फीचर एन क्यूए के लिए विलय हो सकती है। अगर मैं केवल फीचर 3 भेजना चाहता हूं तो क्या होगा? मैं पूरी शाखा को स्टेजिंग में खींच नहीं सकता। बालों के बदलाव से मेरा यही मतलब है, हम जरूरी नहीं कि एक विशिष्ट रिलीज चक्र का पालन करें। यदि हम शाखा को स्विच करने की अनुमति देकर प्रत्येक स्वतंत्र रूप से क्यूए परीक्षण करते हैं तो विलय का परीक्षण कभी नहीं किया जाता है। – jfrobishow

+0

@jfrobishow: लेकिन, अगर आप केवल * फीचर 3 * को शिप करना चाहते हैं, तो क्यूए ने अन्य सुविधाओं से अलग इस सुविधा का परीक्षण नहीं किया है? उस स्थिति में केवल क्यूए क्लोन में * फीचर 3 * के लिए विलय होना चाहिए, इसे * स्टेजिंग * द्वारा खींचा जा सकता है। –

+0

@ ओबेन सोनने: अच्छा बिंदु ... वर्तमान में हम ऐसा नहीं करते हैं।क्यूए के लिए तैयार होने वाली हर चीज स्वीकृति पर डिफ़ॉल्ट शाखा में है। क्यूए परीक्षण प्रत्येक सुविधा को एक हां से हां, लेकिन कभी भी क्यूए शाखा पर नई सुविधाओं द्वारा पेश किए गए अन्य संभावित दोषों से अलग नहीं होता है। एक बार जब वे साइन आउट हो जाते हैं तो हम इसे स्टेजिंग में खींचते हैं लेकिन यह कभी भी पूरी या बहुत कम के रूप में परीक्षण नहीं किया जाता है। अब तक, इसने काम किया है क्योंकि इससे हमें लाइव होने से पहले भावी संघर्षों को पकड़ने की इजाजत मिली है। शायद यह हमारी क्यूए प्रणाली है जिसे ओवरहाल की आवश्यकता है :) – jfrobishow

संबंधित मुद्दे