2009-08-31 7 views
9

मैं वर्तमान में एक लघु शोध परियोजना पर हूं। जिस कंपनी में मैं काम करता हूं वह बहुत भारी रिलीज प्रक्रिया है जो समय बढ़ने के साथ ही बदतर हो रहा है। हम प्रत्येक रिलीज के साथ अधिक से अधिक मुद्दों का सामना कर रहे हैं, जो हमारे वितरण कार्यक्रमों और प्रत्येक रिलीज की गुणवत्ता को गंभीर रूप से प्रभावित करना शुरू कर रहा है। हम एक बड़े SAAS उत्पाद प्रदान करते हैं जो इंटरनेट पर बहुत बड़े वेब खेत पर तैनात किया जाता है। हमारी तैनाती प्रक्रिया वर्तमान में कम से कम डेवलपर भागीदारी के साथ एक समर्पित टीम द्वारा संभाली जाती है। हम मुख्य रूप से एक .NET दुकान हैं, हालांकि हमारे पास कुछ जावा घटक भी हैं।आपकी कंपनी अपने सॉफ्टवेयर को कैसे तैनात करती है?

मैं शोध कर रहा हूं कि कैसे हम अपशिष्ट को कम करने और हमारी देव टीमों के पंख के तहत अधिक प्रक्रिया लाने के लिए हमारी क्यूए और तैनाती प्रक्रिया में सुधार कर सकते हैं। मुझे यह जानने में दिलचस्पी है कि आपकी कंपनी आपके उत्पादों को कैसे तैनात करती है (अधिमानतः एसएएएस, लेकिन ऐसे उत्पादों तक सीमित नहीं) उत्पादन के साथ-साथ वहां के रास्ते पर परीक्षण के माध्यम से यात्रा। मैं उत्सुक हूं कि क्या काम किया है, और क्या नहीं है, और मुझे यकीन है कि आप में से कई कहने के लिए कहानियां हैं।

संपादित करें (अतिरिक्त आरएफसी):

के रूप में मैं अपने अनुसंधान जारी रखा है, मैं की "सतत तैनाती" की अवधारणा, जाहिरा तौर पर IMVU 3 डी ऑनलाइन समुदाय टीम ने बीड़ा उठाया भर में आया था। यह शायद एक जटिल अवधारणा की तरह लगता है, अगर शायद थोड़ा जटिल। मुझे उत्सुकता है कि अगर एसओ पर किसी को भी निरंतर तैनाती के साथ कोई अनुभव है? विशेष रूप से एक बड़ी, जटिल परियोजना के साथ जिसमें इसके कई हिस्से हैं। आपको हमारे अल्पकालिक जरूरतों के लिए लगातार उत्पादन के लिए तैनाती नहीं करनी पड़ेगी, हम केवल आंतरिक देव/क्यूए/प्रतिधारण वातावरण में निरंतर तैनाती को देखेंगे। अगर किसी ने लगातार तैनाती लागू की है, तो मैं यह जानकर भी उत्सुक हूं कि आपने डेटाबेस स्कीमा और डेटा परिवर्तन/रोलबैक कैसे प्रबंधित किया।

धन्यवाद!

उत्तर

7

हम अमेज़ॅन एडब्ल्यूएस क्लाउड पर्यावरण के लिए एक वित्तीय सेवा सास समाधान तैनात करते हैं। हमारा समाधान 100% जावा है इसलिए कई टूल आपके लिए लागू नहीं होते हैं लेकिन अवधारणाओं को चाहिए।

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

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

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

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

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

+0

विस्तृत उत्तर के लिए धन्यवाद। उस कुंजी की तरह लगता है जिसने आपको वर्चुअल मशीनों का उपयोग करने में मदद की। हम जिन उत्पादों का मूल्यांकन कर रहे हैं उनमें से एक वीएमवेयर लैब मैनेजर है। जो मैंने एएमआई के बारे में एकत्र किया, उससे यह एक ही मूल उद्देश्य ... टेम्पलेट आधारित आभासी मशीनों परोसता है। मुझे लगता है कि मुख्य अंतर यह है कि यह हमारे अपने हार्डवेयर पर होस्ट किया जाएगा। एक परिदृश्य को सुनना अच्छा होता है जहां वर्चुअलाइजेशन का सफलतापूर्वक उपयोग किया जाता है (और क्लाउड में, बूट करने के लिए!) – jrista

+0

मैंने इस सवाल को jamiedp भी पूछा, लेकिन आपका आवेदन कितना बड़ा है? क्या आप इसे छोटे, मध्यम, बड़े, या विशाल के रूप में वर्गीकृत करेंगे? यह कोड आधार के आकार, कॉन्फ़िगरेशन की मात्रा और औसत पर # उपयोगकर्ताओं के आकार के संबंध में है। धन्यवाद! – jrista

+0

@jrista: मुझे लगता है कि यह निर्भर करता है कि आप उन आकारों को कैसे परिभाषित करते हैं, लेकिन सही के बारे में बड़ी आवाजें। आवेदन काफी जटिल है, उद्यम प्रौद्योगिकियों का व्यापक उपयोग करता है, और काफी उच्च लेनदेन मात्रा का समर्थन करता है। –

0

आप यह नहीं कह रहे हैं कि आपके रिलीज़ के साथ समस्याएं क्या हो रही हैं? हमें समस्याएं थीं क्योंकि गलत फाइलें हमारे निर्माण में समाप्त हो रही थीं। इसका हमारा उत्तर एक उपकरण बनाना था जो हमें हमारे निर्माण में सभी फाइलों में नियंत्रण और दृश्यता प्रदान करेगा। Here हमारे द्वारा बनाए गए टूल का वेबकास्ट है।

+0

बिल्कुल निश्चित नहीं थे कि विशेष रूप से समस्याएं क्या हैं। हम जानते हैं कि हमारे निर्माण स्क्रिप्ट कैसे काम करते हैं, और तथ्य यह है कि हमारी बिल्ड स्क्रिप्ट कड़ाई से विशिष्ट स्रोत संरचना और हमारे स्रोत नियंत्रण की शाखा संरचना के साथ मिलकर हैं। एक और समस्या जो हम सोचते हैं कि हमारे पास बहुत सारी प्रक्रिया है, जिसके लिए प्रत्येक रिलीज में शामिल होने के लिए ** ** ** लोगों की आवश्यकता होती है। हम जानते हैं कि हमें प्रक्रिया को दुबला करने की जरूरत है ... लेकिन हमारे पास तुलना करने के लिए आधारभूत "अच्छी तैनाती प्रक्रिया" नहीं है। – jrista

+1

आपके द्वारा प्रदान किए गए लिंक पर वेबकास्ट टूटा हुआ प्रतीत होता है। यह कुछ सेकंड के लिए खेलना शुरू कर देता है, फिर बंद हो जाता है। – jrista

0

अस्वीकरण: मैं जो लिखा है उसे बेच सकता हूं, लेकिन अभी के लिए, यह मुफ्त है (और आधिकारिक तौर पर वैसे भी जारी नहीं किया गया है)।

हम एक सिस्टम का उपयोग करते हैं जो मैंने लिखा है।

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

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

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

जनरल प्रक्रिया:

  1. , धड़ को सीआई सर्वर से निर्माण के लिए
  2. प्रतीक्षा कमिट निर्माण 'नग्न' (किसी भी सर्वर के लिए कॉन्फ़िगर नहीं) है
  3. तैनात सर्वर का परीक्षण करने के लिए टूल ("डैश") का उपयोग करके,
  4. टेस्ट
  5. परीक्षण
  6. 012 के साथ खुश रहें
  7. तैनात निर्माण (एक ही निर्माण) सर्वरों

"तैनात" चरणों SVN करने से होते रहते हैं, और उसके बाद प्रोग्राम, यह भी अपने वेब सर्वर पर स्थापित किया, SVN से निर्माण हो जाता है।

प्रभावी रूप से, मैं आपके मानक एसवीएन संरचना में एक नया "आधार" स्तर आइटम जोड़ता हूं। आप आम तौर पर है:

/trunk 
/braches 
/tags 

dashy के साथ, मैं /releases

/trunk 
/braches 
/tags 
/releases 
+0

तो, क्या यह एक पूर्व-निर्मित बिल्ड सिस्टम है, जो कोड को पूरा करने से पहले चेकइन और बनाता है (जैसे टीमसिटी?) मुझे यकीन नहीं है कि मैं पूरी तरह से समझता हूं कि यह क्या करता है ... – jrista

+0

कुछ और जानकारी के साथ अपडेट किया गया। –

+0

धन्यवाद। दिलचस्प लगता है। यदि आपने कभी टीमसिटी के बारे में सुना है तो मैं उत्सुक हूं? यह एक और सीआई उत्पाद है जिसका मैं मूल्यांकन कर रहा हूं। टीसी के बारे में दिलचस्प बात यह है कि यह स्रोत नियंत्रण जांचकर्ताओं को पूर्ववत रूप से रोकता है, बनाता है और सत्यापित करता है, और निर्माण और सत्यापन सफल होने पर केवल चेकइन को स्रोत नियंत्रण में ही करता है। अन्यथा अपराधी को बंद लूप में अधिसूचित किया जाता है, और आप किसी भी शाखा को मारने वाले खराब कोड की समस्या में भाग नहीं लेते हैं। मुझे यकीन नहीं है कि यह किस तरह के परिनियोजन परिदृश्यों का समर्थन करता है, लेकिन निर्माण स्क्रिप्ट द्वारा तैनाती को नियंत्रित किया जा सकता है। http://www.jetbrains.com/teamcity/ – jrista

1

जोड़ने हम एक सास समाधान है और मूल रूप से के रूप में एक ही प्रक्रिया (सतत एकीकरण सर्वर, परीक्षण मचान उत्पादन के लिए तैनाती स्क्रिप्ट) का उपयोग ऊपर एरिक, लेकिन हम खेत नोड्स की सभी प्रतिलिपि करने के लिए PSTools (http://technet.microsoft.com/en-us/sysinternals/bb896649.aspx) पर आधारित कस्टम स्क्रिप्ट का उपयोग करके अपने स्वयं के आधारभूत संरचना में इसे तैनात करते हैं।

प्रत्येक परिनियोजन के लिए हम मूल्यांकन करते हैं कि अलग-अलग नोड्स को ऐप के विभिन्न संस्करणों (यानी।कोई डेटा अखंडता जोखिम नहीं है) या हमें सभी नोड्स को सिंक करने के लिए कुछ सेकंड के लिए ऐप ऑफ लाइन लेना होगा (ऐप को ऑनलाइन वापस आने के लिए लगभग 20 सेकंड लगते हैं, क्योंकि यह केवल एक मास्टर नोड से ऐप्स को कॉपी करता है) ; लेकिन पूरी कुंजी "एक-कुंजी" परिनियोजन प्रक्रिया सेटअप होना है।

+0

जिज्ञासा से, आपका आवेदन कितना बड़ा है? क्या आप इसे छोटे, मध्यम, बड़े, या विशाल के रूप में वर्गीकृत करेंगे? धन्यवाद। :) – jrista

+0

मेरी आखिरी टिप्पणी में प्रश्न कोड आधार, कॉन्फ़िगरेशन की मात्रा और औसत पर # उपयोगकर्ताओं के आकार के संबंध में है। धन्यवाद। – jrista

+0

पूरा सूट कोड की .4 एम लाइनों के बारे में है और कई घटकों (फ्रंट एंड, वेब सर्विसेज, दाल इत्यादि) में बांटा गया है कि हम स्वतंत्र रूप से तैनात कर सकते हैं हालांकि हम आमतौर पर नहीं करते हैं। जहां तक ​​कॉन्फ़िगरेशन है, सभी कॉन्फ़िगरेशन परिवर्तन हमारी तैनाती स्क्रिप्ट द्वारा प्रबंधित/परिवर्तित होते हैं ... और मूल रूप से कनेक्शन स्ट्रिंग्स, सेवा संदर्भों में बदल जाते हैं, जो मुख्य नोड पर तैयार होते हैं और प्रत्येक नोड पर twicked के लिए # उपयोगकर्ताओं के पास, हमारे पास लगभग 10,000 reg उपयोगकर्ता हैं, और दिन के दौरान हमारे पास लगभग 300 सक्रिय सत्र होते हैं, हम हमेशा कम पिक टाइम पर तैनात करने का प्रयास करते हैं, हमारे पास 10 ~ 15 सत्र – Jaime

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

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