छोटी वेब टीम के लिए स्थानीय डेटाबेस विकास प्रक्रिया को कैसे सेटअप करें?


14

पृष्ठभूमि

मैं भविष्य में टीम को विकसित करने की स्पष्ट क्षमता के साथ, लगभग 4 प्रोग्रामर और 4 डिजाइनरों की एक छोटी वेब टीम के लिए एक नई विकास प्रक्रिया बनाने पर काम कर रहा हूं। हमारा उत्पाद एक केंद्रीय अनुप्रयोग है जो क्लाइंट वेबसाइटों को शक्ति देता है जिसे हम डिज़ाइन और होस्ट भी करते हैं।

पहले, हम सभी एक देव सर्वर पर FTP के माध्यम से काम करते थे, एक एकल देव डेटाबेस के साथ। यह कुछ समय के लिए "काम" * करता है , लेकिन हम एक नई दिशा में बढ़ रहे हैं, इसलिए यह हमारी प्रक्रिया को परिपक्व करने का समय है।

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

लक्ष्य :

मैं निम्नलिखित के साथ डेटाबेस विकास के लिए एक निरंतर एकीकरण (CI) प्रक्रिया बनाने की कोशिश कर रहा हूं:

  1. डेवलपर्स के पास विकास कोड चलाने के लिए डेटा की स्थानीय प्रति है
  2. पिछले बदलाव के लिए डेटाबेस संरचना को रोलबैक करने में सक्षम
  3. नई सुविधा स्कीमा परिवर्तन बनाम स्कीमा डिज़ाइन फ़िक्स परिवर्तनों को अलग करने में सक्षम
  4. परीक्षण के लिए स्थानीय स्तर पर डेटाबेस संरचना को संशोधित करने में सक्षम

प्रारंभिक अवधारणा

मैंने SVN और LiquiBase का उपयोग करके नीचे एक प्रक्रिया को छोड़ दिया है, हालांकि यह पूरी तरह से हटा देता है #4

  • ट्रंक से 'विकास' शाखा बनाएँ
  • केंद्रीय 'विकास' डीबी सर्वर 'विकास' शाखा से चलता है
  • स्थानीय डेवलपर्स को विकास शाखा के गुलाम के रूप में स्थापित किया जाता है ( #1ऊपर प्रदान करता है)
  • शराबीबेज परिवर्तन नियमित रूप से विकास शाखा के लिए प्रतिबद्ध हैं, जो केंद्रीय विकास डेटाबेस (जो इस विकास सर्वर के दास के रूप में चल रही स्थानीय मशीनों को नीचे गिरा देगा) को अद्यतन करने के लिए एक पोस्ट-कम हुक निष्पादित करता है (शराबी #2ऊपर प्रदान करता है)
  • जब सुविधाएँ या स्कीमा फ़िक्सेस QA पर जाने के लिए तैयार हैं, तो DBA (me) विकास शाखा से उपयुक्त परिवर्तनों को ट्रंक में मिला देगा। यह अधिनियम एक स्टेजिंग डेटाबेस सर्वर पर लागू करने के लिए एक sql स्क्रिप्ट बनाएगा।
  • स्टेजिंग सर्वर को TRUNK को प्रतिबिंबित करना चाहिए, जिसमें उत्पादन के समान संरचना होनी चाहिए, साथ ही QA में होने वाले परिवर्तन भी
  • स्टेजिंग सर्वर पर sql स्क्रिप्ट निष्पादित करने के बाद, परिवर्तनों पर कुछ QA करें।
  • यदि सभी अच्छे लगते हैं, तो संरचना को TAG करें। यह DBA द्वारा मैन्युअल रूप से उत्पादन में चलाने के लिए .sql स्क्रिप्ट उत्पन्न करेगा (यदि आवश्यक हो तो ऑफ-पीक घंटे के लिए)

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

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

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


* 'काम किया' से मेरा मतलब है कि यह पर्याप्त है लेकिन एक पीआईटीए था।

जवाबों:


12

वातावरण का प्रबंधन

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

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

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

आप अपने मास्टर डेटा मॉडल रिपॉजिटरी के रूप में जो भी उपयोग करते हैं, आपको उस मॉडल से एक पर्यावरण को तैनात करने के लिए एक काफी साफ तंत्र की आवश्यकता होती है। इसे संरचित किया जाना चाहिए ताकि पर्यावरण के लिए रोलआउट आसान हो। आपको एक रिलीज़ किए गए संस्करण से अगले तक पैच करने के लिए एक तंत्र की आवश्यकता है।

मैंने क्या किया

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

एक केंद्रीय रिपॉजिटरी बनाए रखें: यह एक डेटाबेस कंट्रोल स्क्रिप्ट्स का एक संस्करण हो सकता है जो एक संस्करण नियंत्रण प्रणाली या डेटा मॉडलिंग टूल में रिपॉजिटरी मॉडल में रखा गया है। अपना चयन ले लो। इस मॉडल में एक निर्माण तंत्र होना चाहिए जो बहुत सारे मैनुअल हस्तक्षेप के बिना स्क्रिप्ट से वातावरण को बाहर निकालने की अनुमति देता है।

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

विकास के वातावरण को तैनात करने के लिए एक विकल्प यह है कि उत्पादन डेटाबेस के बैकअप को उचित संस्करण पर ले जाया जाए और उन्हें विकास के माहौल में पुनर्स्थापित करने के लिए देवों के लिए उपलब्ध कराया जाए।

इसे रोल आउट करना आसान बनाएं: किसी भी CI निर्माण प्रक्रिया की तरह, डेटाबेस को एक स्क्रिप्ट से तैनात किया जाना चाहिए। इसे सेट अप करें ताकि डेटाबेस कनेक्शन पैरामैटराइज़ किया जा सके, या स्क्रिप्ट स्थान स्वतंत्र है और बस कनेक्शन के माध्यम से चलाया जा सकता है।

पैच स्क्रिप्ट: आपको प्रत्येक रिलीज़ किए गए संस्करण से रोल फ़ॉरवर्ड और संभवत: स्क्रिप्ट वापस रोल करनी होगी।

रिपॉजिटरी मॉडल से टेस्ट वातावरण बनाएं: यह सुनिश्चित करता है कि रिपॉजिटरी के साथ सिंक से बाहर के वातावरण का विकास परीक्षण में पकड़ा जाए।

परिनियोजन प्रक्रिया का परीक्षण करें: स्वचालित पैचिंग स्क्रिप्ट, हालांकि वे बनाई गई हैं परीक्षण योग्य होना चाहिए। स्कीमा तुलना उपकरण इस के लिए काफी अच्छे हैं, भले ही आप पैच स्क्रिप्ट उत्पन्न करने के लिए उनका उपयोग न करें।

  • आपके द्वारा परीक्षण किए गए रिपॉजिटरी मॉडल बिल्ड के साथ एक संदर्भ वातावरण बनाएं

  • अपने उत्पादन रिलीज़ के बैकअप के साथ या वर्तमान रिलीज़ किए गए संस्करण के आधार पर बिल्ड के साथ एक स्मोक टेस्ट वातावरण बनाएँ।

  • धुआँ परीक्षण पर्यावरण के खिलाफ पैच स्क्रिप्ट चलाएँ।

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

मुझे इस प्रक्रिया के बारे में क्या पसंद है

यह थोड़ा भारी है, और काफी नौकरशाही और अपारदर्शी उत्पादन वातावरण में तैनात करने के लिए डिज़ाइन किया गया था। हालाँकि, इसकी निम्नलिखित खूबियाँ हैं:

  • डिवेलपर्स को जहां जरूरत हो वहां टिंकर कर सकते हैं।

  • विकास की कई शाखाओं और धाराओं को समायोजित किया जा सकता है।

  • परिनियोजन स्क्रिप्ट को स्वयं एक बार फिर से परीक्षण किया जा सकता है। यह डिप्लॉयबिलिटी को प्रदर्शित करने के लिए परिनियोजन बंफेट्स को बंद करने के लिए बहुत सहायक है।

  • स्कीमा तुलना उपकरण तैनाती पर ही क्यूए प्रदान करते हैं।

  • परीक्षण हमेशा जारी किए जाने की उम्मीद के खिलाफ किया जाता है, और यह सिंक से बाहर होने वाले वातावरण से उत्पन्न होने वाले मुद्दों को पकड़ लेगा।

  • रिपॉजिटरी मॉडल और पैच स्क्रिप्ट के आधार पर तैनाती का मतलब है कि अनियंत्रित बकवास को गलती से विकास के वातावरण से उत्पादन में स्थानांतरित नहीं किया जाता है।

  • बहुत सारी प्रक्रिया को स्वचालित किया जा सकता है, हालांकि यह तैनाती पैच स्क्रिप्ट को मैन्युअल रूप से तैयार करने और परीक्षण करने के लिए अक्सर वांछनीय है।

  • हुप्स के माध्यम से कूदने के बिना वातावरण सस्ते और आसान हैं।

  • डेवलपर्स को एक प्रणाली बनाने के लिए मजबूर किया जाता है जो एक सरल निर्माण और तैनाती प्रक्रिया के लिए उत्तरदायी है।

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

यह आपकी आवश्यकताओं को कैसे संबोधित करता है

  1. डेवलेपमेंट

    स्क्रिप्ट या DB छवियों के विरुद्ध विकास कोड चलाने के लिए डेवलपर्स के पास डेटा की स्थानीय प्रति होती है, जिसका अर्थ है कि वे किसी भी संस्करण से एक वातावरण सेट कर सकते हैं जो उपलब्ध है।

  2. पिछले

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

  3. नई सुविधा स्कीमा परिवर्तन को अलग करने में सक्षम बनाम स्कीमा डिज़ाइन फ़िक्स परिवर्तन

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

  4. परीक्षण के लिए स्थानीय रूप से डेटाबेस संरचना को संशोधित करने में सक्षम

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

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