2010-05-20 8 views
7

पर्यावरण का सारांश।एमएसबिल्ड: डीबी माइग्रेशन स्क्रिप्ट का स्वचालित संग्रह?

  • Asp.net वेब अनुप्रयोग (स्रोत SVN में संग्रहीत)
  • SQL सर्वर डेटाबेस। (एसवीएन में संग्रहीत डेटाबेस स्कीमा (टेबल/स्पॉक्स)
  • डीबी संस्करण वेब एप्लिकेशन असेंबली संस्करण के साथ समन्वयित है। (तालिका 'CurrentVersion' में संग्रहित)
  • सीआई हडसन सर्वर जो रेपो से वेब ऐप की जांच करता है और ऐप प्रकाशित/पैकेज करने के लिए कस्टम msbuild फ़ाइल चलाता है।

मेरी एमएसबिल्ड स्क्रिप्ट प्रत्येक बिल्ड पर वेब ऐप (Major.Minor.Revision.build) के असेंबली संस्करण को अपडेट करती है। 'संशोधन' वर्तमान में चेक आउट आउट एसवीएन संशोधन और हडसन बिल्ड नंबर (प्रत्येक स्वचालित निर्माण पर वृद्धि) के लिए 'बिल्ड' पर सेट है।

इस तरह से मैं ऐप से एक विशिष्ट ट्रंक संशोधन में मिलान कर सकता हूं, हडसन बिल्ड नंबर से अन्य बिल्ड आंकड़े भी प्राप्त कर सकते हैं।

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

यह आसानी से svn diff -r REVNO:REVNO कमांड को सूचीबद्ध .sql फ़ाइलों को सूचीबद्ध करने के लिए मैन्युअल रूप से कॉल करके हासिल किया जा सकता है। इन फ़ाइलों को मैन्युअल रूप से पैकेज में जोड़ा जाना चाहिए। यह बहुत अच्छा होगा अगर यह स्वचालित हो सकता है।

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

अंततः मुझे उस पैकेज में जोड़ने के लिए एक स्क्रिप्ट ऑटोजेन करना होगा जो डेटाबेस संस्करण तालिका को अपडेट करता है ताकि एप्लिकेशन के साथ सिंक हो सके।

+0

यह एक अजीब सवाल है। हम बिल्ड स्क्रिप्ट का काफी उपयोग करते हैं, लेकिन मैं अभी भी हमारे डीबी को एसवीएन में लाने के लिए संघर्ष कर रहा हूं, कभी-कभी डेवलपर बदलने के लिए प्रतिरोधी हो सकते हैं :) –

+0

ठीक है, एक एसवीएन कमांड मिला जो बदली गई फ़ाइलों की सूची को एक आउटपुट में आउटपुट कर सकता है एक्सएमएल फ़ाइल। उस से मैं msbuild के माध्यम से उस XML फ़ाइल को संसाधित करने में सक्षम होना चाहिए ताकि व्यक्तिगत कार्य फ़ाइलों को चेकआउट करने के लिए आवश्यक हो। '>;' कमांड क्रूक्स था;) svn diff -r REVNO: REVNO --xml --sumarize "svn: // PathToTrunk">; घ: /temp.xml –

उत्तर

2

SQL डेटाबेस प्रोजेक्ट पर एक नज़र डालें। वीएस 2010 में उन्हें काफी बढ़ाया गया है और तैनाती क्षमताओं में बनाया गया है जो आपके DEV डेटाबेस को अन्य वातावरण में सिंक कर सकते हैं।

यहाँ बनाम 2010 में डीबी परियोजनाओं के बारे में कुछ अच्छे लिंक हैं: http://msmvps.com/blogs/deborahk/archive/2010/05/02/vs-2010-database-project-building-and-deployment.aspx

http://weblogs.asp.net/gunnarpeipman/archive/2009/07/29/visual-studio-2010-database-projects.aspx

0

कोशिश एसक्यूएल परीक्षक: http://www.sqlaccessories.com/Howto/Version_Control.aspx

आप एसक्यूएल परीक्षक कमांड लाइन उपकरण के साथ एकत्रित स्क्रिप्ट स्वचालित कर सकते हैं ।

4

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

1) आपको अपने डेल्टा को अपने तैनाती पैकेज में पैकेज करने की आवश्यकता है। ध्यान दें कि आपको डेल्टा पैकेज करना चाहिए - स्थिर फाइलें जो वर्तमान स्थिति में स्कीमा बनाती हैं। ये डेल्टा स्क्रिप्ट स्रोत नियंत्रण में होनी चाहिए। स्थिर नियंत्रण को स्थिर नियंत्रण में रखना ठीक है, लेकिन आपको इसे डेल्टा के साथ समन्वयित रखना होगा। आप वास्तव में स्थिर स्कीमा से (अधिकांश) डेल्टा उत्पन्न करने के लिए Red Gate's SQLCompare या VS डेटाबेस संस्करण जैसे टूल का उपयोग कर सकते हैं। अपने तैनाती पैकेज में डेल्टा प्राप्त करने के लिए, और यह देखते हुए कि आप svn का उपयोग कर रहे हैं - आप अपने वेब प्रोजेक्ट में डेल्टा स्क्रिप्ट्स को "सॉफ्ट लिंक" करने के तरीके के रूप में svn: बाहरी को देखना चाहते हैं। आपकी बिल्ड स्क्रिप्ट तब उन्हें अपने तैनाती पैकेज में कॉपी कर सकती है।

2) आपको एक ऐसी प्रणाली की आवश्यकता है जो डेल्टा फ़ाइलों की सूची को पढ़ सके, उन्हें मौजूदा डेटाबेस से तुलना करें, यह निर्धारित करें कि उस डेटाबेस पर कौन से डेल्टा को लागू करने की आवश्यकता है, और फिर डेल्टा लागू करें (और बहीखाता जानकारी अपडेट करें, जैसे डेटाबेस संस्करण)। एक ओपन-सोर्स प्रोजेक्ट (थॉटवर्क्स द्वारा प्रायोजित) है जिसे dbdeploy कहा जाता है जो इसे पूरा करता है। मुझे व्यक्तिगत रूप से उस टूल के साथ कुछ सफलता मिली है।

शुभकामनाएं - यह क्रैक करने के लिए एक कठिन अखरोट है (सही ढंग से)।

0

कि एक .NET/एसक्यूएल सर्वर ढेर को लक्षित आज उपलब्ध समाधान कर रहे हैं:

  • DBUp (ओपन सोर्स)
  • ReadyRoll (गहरी दृश्य स्टूडियो एकीकरण, लिपियों के ऑटो पीढ़ी)

उत्तरार्द्ध उत्पाद वह है जिसे हम सक्रिय रूप से रेडगेट में विकसित कर रहे हैं।

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