एसवीएन के साथ आपका पसंदीदा वेब ऐप परिनियोजन वर्कफ़्लो क्या है?

हम वर्तमान में कुछ जटिल तैनाती सेटअप का उपयोग कर रहे हैं जिसमें रिमोट एसवीएन सर्वर, डीवी, स्टेज और प्रोड के लिए 3 एसवीएन शाखाएं शामिल हैं, पैच के माध्यम से उनके बीच कोड को बढ़ावा देना आदि। मुझे आश्चर्य है कि आप एक छोटी देव टीम की स्थिति में तैनाती के लिए क्या उपयोग करते हैं ?

0
जोड़ा संपादित
विचारों: 1

11 उत्तर

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

0
जोड़ा

हम रिलीज ब्रांचिंग का उपयोग करते हैं - यह हमारे द्वारा किए जा रहे फीचर ब्रांचिंग की तुलना में हमारे लिए अधिक कुशल लगता है।

विभिन्न वातावरण के लिए अलग शाखाएं मत बनाओ।

0
जोड़ा

जब मैंने एक छोटी देव टीम (छोटे अर्थ, एक और प्रोग्रामर और बॉस) में काम किया, तो यह काफी अराजक गड़बड़ था। हालांकि हमने पाया कि "गेटकीपर" प्रकार की प्रक्रिया को असाइन करना हमारे लिए काम करता है।

द्वारपाल वह व्यक्ति था जिसने ऐप पर सबसे अधिक काम किया था (इस मामले में, मेरे पास जमीन से विकसित 2 परियोजनाएं थीं, उन्हें 4 पसंद था)।

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

इसमें स्पष्ट रूप से बहुत सारे छेद हैं, लेकिन प्रक्रिया हमारे लिए काम करती है, और हमें एक-दूसरे के निर्माण से रोकती है।

0
जोड़ा

तीन शाखाएं सिर्फ अतिरिक्त काम की तरह लगती हैं।

Environmental differences can be handled by having different versions of the relevant files in the trunk. i.e. database.yml & database.yml.prod. The deployment process should be environmentally aware and simply copy the per-environment files over the default ones.

0
जोड़ा

मैं इसी तरह की स्थिति के साथ काम करता हूं जो आपके पास वर्तमान में है। मुझे एक बेहतर खोजने के लिए काम किया गया था? बेहतर? समाधान और यह निम्नलिखित की रेखाओं के साथ कुछ चला गया।

लाइव शाखा अपने वर्तमान राज्य में सर्वर का प्रतिनिधित्व करती है।

जीवित से ली गई शाखा में कोई भी विकास कार्य किया जाना चाहिए। यह एक व्यक्ति आधे घंटे की नौकरी या एक साल की लंबी टीम परियोजना हो सकती है। जितनी बार पसंद किया जाता है, जीने के लिए परिवर्तन इन विकास शाखाओं में विलय किया जा सकता है।

काम का एक टुकड़ा लाइव होने से पहले, लाइव से परिवर्तन फिर से विलय कर दिए जाते हैं और इसे संभावित रिलीज के रूप में टैग किया जाता है। यह रिलीज स्टेजिंग पर्यावरण पर परीक्षण किया जाता है और यदि यह टैग से नया लाइव परीक्षण किया जाता है तो परीक्षण किया जाता है।

यदि यह बेहतर काम करता है तो काम के कई टुकड़ों को एक रिलीज में विलय करना संभव है।

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

एक प्रोजेक्ट पर दूसरे प्रोजेक्ट पर काम करने से बदलने के लिए डेवलपर बस अपने स्थानीय कामकाजी माहौल को एक अलग शाखा में स्विच कर सकता है।

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

0
जोड़ा

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

0
जोड़ा

हम वेब से संबंधित सामान स्टेजिंग के लिए शाखाओं का उपयोग नहीं करते हैं; केवल प्रयोगात्मक चीजों का परीक्षण करने के लिए जो ट्रंक में वापस विलय करने के लिए एक लंबा समय लगेगा (पढ़ें: एक दिन से अधिक)। ट्रंक, 'सतत एकीकरण' शैली में, एक (उम्मीद है) काम कर रहा है, वर्तमान स्थिति।

इस प्रकार, अधिकांश परिवर्तन सीधे ट्रंक के लिए प्रतिबद्ध हो जाते हैं। एक CruiseControl.NET सर्वर स्वचालित रूप से एक मशीन पर अपडेट हो जाएगा जो आईआईएस चलाता है और सभी अतिरिक्त साइट के संसाधनों की अद्यतित प्रतियां उपलब्ध है, इसलिए साइट पूरी तरह से साफ-सफाई की जा सकती है। परीक्षण के बाद, फ़ाइलें सार्वजनिक सर्वर पर अपलोड की जाती हैं।

मैं नहीं कहूंगा कि यह सही दृष्टिकोण है, लेकिन यह आसान है (और इस प्रकार हमारे अपेक्षाकृत छोटे कर्मचारियों के लिए उपयुक्त है) और अपेक्षाकृत सुरक्षित है, और यह ठीक काम करता है।

0
जोड़ा

विकास के लिए ट्रंक, और उत्पादन सामग्री के लिए एक शाखा (उत्पादन)।

मेरी स्थानीय मशीन पर, मेरे पास वर्चुअलहोस्ट है जो मेरे परिवर्तनों का परीक्षण करने के लिए ट्रंक शाखा को इंगित करता है।

ट्रंक के लिए कोई भी प्रतिबद्धता एक प्रतिबद्ध हुक ट्रिगर करता है जो एक एसवीएन निर्यात करता है और ऑनलाइन सर्वर के देव यूआरएल को सिंक करता है - इसलिए यदि साइट stackoverflow.com है तो यह हुक स्वचालित रूप से dev.stackoverflow.com को अपडेट करता है

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

जब मैं उत्पादन शाखा में विलयित परिवर्तन करता हूं, तो फिर एक एसवीएन निर्यात हुक उत्पादन (लाइव) निर्यात अद्यतन करता है और साइट लाइव है!

0
जोड़ा
मुझे यह पसंद है लेकिन आप इस विधि के साथ अपने डेटाबेस अपडेट कैसे रखते हैं?
जोड़ा लेखक cgreeno, स्रोत
वेब साइट कोड किसी व्यवस्थापक URL से डेटाबेस को अद्यतन संभालता है, और अपग्रेड करने के बारे में जानने के लिए डेटाबेस 'संस्करण संख्या' होती है।
जोड़ा लेखक Thomas Vander Stichele, स्रोत

ट्रंक में वर्तमान "प्राथमिक" विकास कोडबेस शामिल है।

एक डेवलपर अक्सर किसी भी मध्यम से लंबी अवधि की परियोजना के लिए एक व्यक्तिगत शाखा बना देगा जो ट्रंक कोडबेस को नली बना सकता है और अन्य देवताओं के रास्ते में जा सकता है। जब वह पूरा हो जाए तो वह वापस ट्रंक में विलय कर देगा।

हर बार जब हम उत्पादन को कोड दबाते हैं तो हम एक टैग-रिलीज बनाते हैं। / टैग में फ़ोल्डर बस संस्करण संख्या है।

उत्पादन में तैनाती के लिए हम स्टेजिंग में एक एसवीएन निर्यात कर रहे हैं। जब यह संतोषजनक होता है तो हम उत्पादन समूहों को रोल करने के लिए एक साधारण rsync का उपयोग करते हैं।

0
जोड़ा

मुझे आम टैग / शाखाओं / ट्रंक संगठन के साथ कोई परेशानी नहीं है।

सामान्य चल रहा विकास ट्रंक में होता है।

उत्पादन में एक रिलीज का रखरखाव उचित रिलीज शाखा में होता है।

रिलीज शाखा में परिवर्तन जो अभी भी ट्रंक के लिए प्रासंगिक हैं विलय कर रहे हैं।

When a new version is ready for deployment it is tagged from trunk, then a branch is created from that tag. The new release branch is checked out to the server, parallel to the current release. When it's time to switch, the paths are juggled ("mv appdir appdir.old && mv appdir.new appdir").

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

0
जोड़ा

मैं अत्यधिक पुस्तक (वर्तमान में किसी न किसी कटौती में) की अनुशंसा करता हूं निरंतर वितरण , जो सॉफ़्टवेयर प्रबंधित करने के लिए पूर्ण प्रक्रिया का वर्णन करता है वितरण, सतत एकीकरण सिद्धांतों (दूसरों के बीच) के आधार पर।

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

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

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

0
जोड़ा
पुस्तक अब बाहर है, और यह मैंने जो पढ़ा है उससे अच्छा लगता है।
जोड़ा लेखक Andrew Swan, स्रोत