क्या एसवीएन से सीधे उत्पादन के लिए वेब ऐप को तैनात करना स्वीकार्य है


11

सवाल

क्या उत्पादन के लिए SVN का उपयोग करने का कोई वैध कारण नहीं है, या यह केवल व्यक्तिगत पसंद का मामला है और SVN के खिलाफ कोई वास्तविक मामला नहीं है?

पृष्ठभूमि

मेरे कार्यस्थल में एसवीएन में रिलीज को टैग करने की संस्कृति है और फिर उन रिलीज को सीधे विभिन्न वेब सर्वरों में उपयोग करके svn coया svn switchसीधे उत्पादन में शामिल करना है।

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

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

संपादित करें:

निर्माण और तैनाती के बारे में मेरा क्या मतलब है:

उदाहरण के लिए, यदि किसी डेवलपर को किसी विशेष वातावरण के लिए एक web.config सेटिंग की आवश्यकता होती है। Web.config को आमतौर पर svn में नहीं रखा जाता है और इसलिए इन फ़ाइलों को बिना किसी स्वचालित निर्माण स्क्रिप्ट के मैन्युअल रूप से अपडेट किया जाता है। इसलिए यदि वे खो गए हैं या OPS एक रिलीज़ के लिए web.config में फ़ील्ड जोड़ना भूल गए हैं तो आपके पास समस्याएँ हैं।

एक बिल्ड स्क्रिप्ट जो कहती है कि किसी विशेष वातावरण के लिए उपयुक्त web.config को स्वचालित रूप से उत्पन्न करने के लिए XMLPoke का उपयोग करता है, आदर्श है कि आपके पास एक संस्करण योग्य स्क्रिप्ट है जो आपके प्रत्येक वातावरण के लिए आवश्यक सभी परिवर्तनों को दस्तावेज़ करती है।

करंट बिल्ड एंड डिप्लो मेथड

परियोजना के लिए सवाल में एक डेवलपर मैन्युअल रूप से एक रिलीज बनाता है, अन्य परियोजनाओं में बिल्ड चरण स्वचालित रूप से NANT, या MSBuild के साथ होता है जो ठीक है।

अधिकांश प्रोजेक्ट्स के लिए डेटाबेस माइग्रेशन DB स्क्रिप्ट, या माइग्रेशन स्क्रिप्ट (Migrator.NET), या CMS पैकेज के माध्यम से होते हैं।

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

हालाँकि, वास्तविक कोड तैनाती SVN के माध्यम से हमेशा बहुत अधिक होती है, या तो टैग किए गए रिलीज़ के चेकआउट के माध्यम से या फिर आमतौर पर SVN स्विच के माध्यम से। यह कुछ ऐसा है जो मेरे साथ अजीब लगता है कि हम अपनी रिपॉजिटरी का उपयोग तैनाती प्रक्रिया के हिस्से के रूप में कर रहे हैं।

कॉन्फ़िगरेशन आमतौर पर बहुत बार नहीं बदलता है, केवल वही चीजें जो कॉन्फ़िगरेशन फ़ाइलों में होंगी वे पर्यावरण विशिष्ट जानकारी हैं। बाकी सब db में है।

मुझे यह काम गलत नहीं लगता, यह अच्छी तरह से काम करता है। हालाँकि मैं एक स्वचालित निर्माण और तैनाती के लिए प्रयास करना चाहता हूं। मैंने इसका उपयोग रेल्स और कैपिस्ट्रानो के साथ, और व्यक्तिगत परियोजनाओं के लिए सिग्विन, नेंट और एसएसएच का उपयोग करके किया है।

अधिक महत्वपूर्ण बात यह है कि मुझे अपने सहयोगियों को एक स्वचालित निर्माण और तैनाती का उपयोग करने के लिए बदलने के लिए बहुत विशिष्ट मान्य तर्क की आवश्यकता होगी।

या विशेष रूप से उत्पादन में तैनात करने के लिए एसवीएन का उपयोग करने के खिलाफ कोई वास्तविक वैध तर्क नहीं हैं?


क्या आप "निर्माण और तैनाती स्क्रिप्ट का उपयोग किए बिना या कुछ फॉर्म या स्वचालित तैनाती के बिना एकीकरण वातावरण सेटिंग्स को खो देते हैं" पर विस्तार से बता सकते हैं?
टेलोंक्स

@talonx - उदाहरण के लिए, यदि किसी डेवलपर को किसी विशेष वातावरण के लिए एक web.config सेटिंग की आवश्यकता होती है। web.config को आमतौर पर svn में नहीं रखा जाता है और इसलिए इन फ़ाइलों को बिना किसी स्वचालित निर्माण स्क्रिप्ट के मैन्युअल रूप से अपडेट किया जाता है। इसलिए यदि वे खो गए हैं या OPS web.config में कोई फ़ील्ड जोड़ना भूल गए हैं तो आपके पास समस्याएँ हैं। एक बिल्ड स्क्रिप्ट जो कहती है कि XMLPoke का उपयोग किसी विशेष वातावरण के लिए उपयुक्त web.config को स्वचालित रूप से उत्पन्न करने के लिए किया जाता है, आदर्श है कि आपके पास एक संस्करण योग्य स्क्रिप्ट है जो आपके प्रत्येक वातावरण के लिए आवश्यक सभी परिवर्तनों को दस्तावेज़ करती है।
जस्टिन शील्ड

धन्यवाद। हो सकता है कि आप इस बिंदु को स्पष्ट करने के लिए अपने प्रश्न को संपादित कर सकें।
टैलोनक्स

क्या उन्हें चेकआउट (संकलन, पैकेजिंग, कॉन्फ़िगरेशन, ...) के बाद केवल स्रोतों की जांच करने की आवश्यकता है या कोई मैनुअल चरण हैं?
डेविड

जवाबों:


7

मेरे अनुभव से, इसके फायदे और नुकसान दोनों हैं:

पेशेवरों:

  • कभी-कभी आप उत्पादन सर्वर पर तत्काल गर्म सुधार करते हैं, तो आप उन्हें सीधे वहां से वापस देख सकते हैं। (हालांकि सैद्धांतिक रूप से, सुरक्षा कारणों से उत्पादन सर्वर से रेपो तक केवल पढ़ने के लिए उपयोग करना एक अच्छा विचार है)

  • सादगी: आप जल्दी से वितरित करते हैं, हालांकि जैसा कि अन्य लोगों ने यहां बताया है, अपडेट-स्क्रिप्ट स्कीम पर स्विच करना उतना आसान हो सकता है।

विपक्ष:

  • आपके svn upऔर DB अपडेट के दौरान आपका सिस्टम अस्थिर हो सकता है । एक उच्च-ट्रैफ़िक साइट के लिए इसका अर्थ है कि कुछ उपयोगकर्ता त्रुटि संदेश, टूटे हुए पृष्ठ या खाली पेजों को अच्छे से हिट करेंगे। खैर, यह वही है जो हम अक्सर विभिन्न सामाजिक सेवाओं पर देखते हैं। एक अच्छी सेवा, हालांकि, यह "परमाणु" इस अर्थ में करती है कि यह सिस्टम को अपडेट की अवधि के लिए रखरखाव मोड में रखती है। ( आपने रेडिट तोड़ दिया! )

  • संघर्ष: निर्माण सर्वर पर अचानक संघर्ष को हल करना एक भयानक विचार है: फिर से, आप इसे ठीक करते समय सेवा अस्थिर हो जाती है।

  • उत्पादन सर्वर पर असंबंधित फाइलें जो आपके लिए हो भी सकती हैं और नहीं भी, हालांकि बेशक आप रेपो में सही सबट्री की जांच करके इससे बच सकते हैं।

  • सुरक्षा: कोई है जो आपके उत्पादन सर्वर तक पहुँच प्राप्त करता है, कानूनी रूप से या नहीं, आपके रिपॉज़ तक पहुंच प्राप्त करता है, संभवतः अन्य उत्पादों के साथ भी, और संभवतः लेखन पहुंच के साथ भी! कुल मिलाकर बाहरी दुनिया के लिए अपने आंतरिक एसवीएन सर्वर को खोलना एक बुरा विचार है। आपका स्रोत रिपॉजिटरी एक कंपनी फ़ायरवॉल, अवधि के पीछे होना चाहिए।

  • वैसे भी अद्यतन स्क्रिप्ट होने जा रहे हैं, उदाहरण के लिए DB संरचना को अद्यतन करने के लिए, cronjobs का प्रबंधन, आदि, तो क्यों नहीं एक स्क्रिप्ट है कि सभी करता है? - यानी नवीनतम प्री-पैकेज्ड रिलीज को खींचता है, रखरखाव मोड में स्विच करता है, स्रोत अपडेट करता है, रिलीज-विशिष्ट स्क्रिप्ट चलाता है आदि।

संपादित करें: एसवीएन योजना पर अभी भी उन लोगों के लिए, अपने अपाचे लॉगिन में इसे न भूलें:

<DirectoryMatch .svn>
    Order deny,allow
    Deny from all
</DirectoryMatch>

1
+1: उत्कृष्ट तर्क। मैं इसे सुरक्षा पहलू और एक समझौता भंडार होने के जोखिम को बेचने में सक्षम हो सकता हूं। निश्चित रूप से उत्पादन deploys के लिए SVN का उपयोग करने के खिलाफ एक चर्चा को बढ़ावा देने के लिए एक अच्छा कारण है।
जस्टिन शील्ड

2

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

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

एक संदर्भ के लिए, जोएल खुद देखें कि कैसे एक क्लिक निर्माण प्रक्रिया आपको लघु से मध्यम अवधि में बचाती है।


0

सुनिश्चित करें कि आपके पास SVN पर उपयुक्त चेकइन नियंत्रण है। उदाहरण के लिए, इस पर विचार करें -

  • रिलीज़ के लिए सुविधाओं की जाँच की जाती है
  • कोड को मचान में तैनात किया गया है, क्यूए अपना काम करता है
  • कीड़े तय हो गए हैं, परीक्षण का एक और दौर (हालांकि यह आपकी टीम में काम करता है)
  • पूर्व-उत्पादों के लिए डिट्टो
  • उत्पादन के लिए तैनात करें

यदि कोई गलती से पूर्व-ठेस चरण के बाद चेकइन करता है, तो कुछ को तोड़ने का जोखिम होता है। यदि इसे नियंत्रित किया जाता है - जैसे कि बग फिक्स के अलावा पूर्व-चेकों के दौरान किसी भी चेकइन की अनुमति नहीं है - मुझे कोई जोखिम नहीं दिखता है।

अद्यतन: यदि आपके पास अपनी कॉन्फ़िगरेशन फ़ाइलों की जांच नहीं करते हैं, तो आपको प्रतीक्षा करने में समस्या है। मैं वास्तव में "कृपया करो, और उपवास करो" के अलावा इसके लिए कोई सलाह नहीं दे सकता!


कॉन्फ़िगरेशन फ़ाइलों को web.config-default जैसी किसी चीज़ में चेक किया जाता है। इसके साथ सबसे बड़ी समस्या यह है कि एसवीएन में संस्करण फ़ाइल को अपडेट करना भूल जाना बहुत आसान है यदि आप सुविधाओं को जोड़ते हैं क्योंकि वे सीधे एक तैनाती के लिए आवश्यक नहीं हैं। ये फ़ाइलें लगभग हमेशा पुरानी हो जाती हैं और यह केवल तब होता है जब आपको पता चलता है कि आपको फ़ाइल की आवश्यकता है, तब आप यह पता लगाने के लिए स्क्रैच कर रहे हैं कि संस्करण फ़ाइल और गैर-संस्करणित फ़ाइल के बीच क्या अंतर है। इसके अतिरिक्त आप एसवीएन में प्रति समान संस्करण को अद्यतन नहीं करना चाहते हैं।
जस्टिन शील्ड

ऑपरेशन करने से पहले हमेशा तैनाती से पहले svn से कॉन्फिग फाइल कैसे लें?
टेलोंक्स

0

यह ठीक लगता है जब तक कि भंडार के बाहर कुछ भी नहीं है। वास्तव में, मेरा मानना ​​है कि किसी को परियोजना के पहले कुछ महीनों में तैनाती के साधनों में समय नहीं लगाना चाहिए। क्योंकि वहाँ बहुत सारे तैनाती होगी, न कि ग्राहकों को औपचारिक रिहाई प्रक्रिया के बारे में परेशान होने के लिए।

लेकिन एक बार परियोजना तैनाती के उपकरण में निवेश करने पर विचार करने लायक एक वर्ष पुरानी है। सरल कारण हैं

  • व्यवसाय बढ़ता है इसलिए आप इसे एक से अधिक सर्वर पर होस्ट करने की योजना बनाते हैं
  • किसी विशेष वातावरण पर कीड़े हो सकते हैं और आपके पास बग को दोहराने के लिए कोई जगह नहीं है। टार-अनार-भूल_बौट_होम_फोरा_अवेक की प्रक्रिया के बिना इसे सेट करने का कोई आसान तरीका नहीं है।
  • कुछ एक निर्माण को तोड़ने की संभावना है। जिसने निर्माण को तोड़ा

यदि आप उन्हें आश्वस्त करना चाहते हैं, तो उन्हें आंतरिक परीक्षण या क्यूए के लिए एक और सर्वर सेटअप करने के लिए कहें।

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