आप अपने ASP.NET एप्लिकेशन को लाइव सर्वर पर कैसे तैनात करते हैं?


104

मैं विभिन्न तकनीकों / उपकरण आपको एक ASP.NET वेब अनुप्रयोग परियोजना (तैनात करने के लिए उपयोग करने के लिए देख रहा हूँ नहीं ASP.NET वेब साइट) उत्पादन के लिए?

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

  1. क्या आप कुछ विशिष्ट उपकरणों या सिर्फ XCOPY का उपयोग कर रहे हैं? आवेदन कैसे पैक किया जाता है (ज़िप, एमएसआई, ...)?

  2. जब पहली बार किसी एप्लिकेशन को तैनात किया जाता है तो आप ऐप पूल और वर्चुअल डायरेक्टरी को कैसे सेटअप करते हैं (क्या आप उन्हें मैन्युअल रूप से या किसी टूल से बनाते हैं)?

  3. जब कोई स्थैतिक संसाधन बदलता है (CSS, JS या छवि फ़ाइल) क्या आप पूरे अनुप्रयोग या केवल संशोधित संसाधन को फिर से जोड़ते हैं? जब कोई असेंबली / ASPX पृष्ठ बदलता है, तो कैसे?

  4. क्या आप किसी दिए गए आवेदन के लिए सभी तैनात संस्करणों का ट्रैक रखते हैं और यदि कुछ गलत हो जाता है, तो क्या आपके पास एप्लिकेशन को पिछले ज्ञात कार्यशील राज्य में पुनर्स्थापित करने की प्रक्रिया है?

पिछली सूची को पूरा करने के लिए स्वतंत्र महसूस करें।


और यहाँ हम अपने ASP.NET अनुप्रयोगों को तैनात करने के लिए क्या उपयोग करते हैं:

  1. हम समाधान के लिए एक वेब परिनियोजन प्रोजेक्ट जोड़ते हैं और इसे ASP.NET वेब अनुप्रयोग बनाने के लिए सेट करते हैं
  2. हम एक सेटअप परियोजना (जोड़ने नहीं समाधान के लिए वेब सेटअप परियोजना) और इसे सेट वेब तैनाती परियोजना के उत्पादन लेने के लिए
  3. हम एक कस्टम इंस्टॉलेशन क्रिया जोड़ते हैं और OnInstall ईवेंट में हम एक कस्टम बिल्ड .NET असेंबली चलाते हैं, जो System.DirectoryServices.DirectoryEntry का उपयोग करके IIS में एक ऐप पूल और एक वर्चुअल डायरेक्टरी बनाता है। (यह कार्य केवल पहली बार किया जाता है जब कोई एप्लिकेशन तैनात किया जाता है) । हम IIS में कई वेब साइटों, वर्चुअल निर्देशिकाओं के लिए प्रमाणीकरण और ऐप पूल के लिए पहचान स्थापित करने का समर्थन करते हैं।
  4. हम सेटअप प्रोजेक्ट बनाने के लिए TFS में एक कस्टम कार्य जोड़ते हैं (TFS सेटअप प्रोजेक्ट्स का समर्थन नहीं करता है इसलिए हमें MSI बनाने के लिए devenv.exe का उपयोग करना पड़ा)
  5. MSI लाइव सर्वर पर स्थापित है (यदि MSI का पिछला संस्करण है तो इसे पहली बार अनइंस्टॉल किया गया है)


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

जवाबों:


25

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


19

हम लाइव सर्वर पर तैनाती को लागू करते हैं, इसलिए हम इंस्टॉलर परियोजनाओं का उपयोग नहीं करते हैं; हमारे पास CI जैसा कुछ है:

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

रोबोकॉपी स्वचालित रूप से यह सुनिश्चित करती है कि केवल परिवर्तन तैनात किए गए हैं।

ऐप पूल आदि को फिर से शुरू करें; मुझे यह पसंद है कि यह स्वचालित हो ( इस प्रश्न को देखें ), लेकिन फिलहाल यह मैनुअल है। मैं वास्तव में उसे बदलना चाहता हूं।

(यह संभवत: मदद करता है कि हमारे पास अपना स्वयं का डेटा-सेंटर और सर्वर-फ़ार्म "ऑन-साइट" है, इसलिए हमें बहुत सारे डेटा क्रॉस नहीं करने होंगे)


आप लोग approvedस्रोत कैसे संभालते हैं ? शाखाओं?
शॉन म्लेच्छन

1
@ शॉन मुझे इस बात पर जोर देना चाहिए कि यह पिछले जीवन में पिछली नौकरी पर था - अब से बहुत पहले। मैं भी सटीक प्रक्रिया वापस तो याद नहीं कर सकते। शायद मूल रूप से "पेंच मत करो"।
मार्क Gravell

7

वेबसाइट

नियोक्ता: http://www.codeproject.com/KB/install/deployer.aspx

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

बेशक पहले चलाने के लिए आपको सर्वर से कनेक्ट करना होगा और IIS वेबसाइट, डेटाबेस को सेटअप करना होगा, लेकिन उसके बाद प्रकाशन अपडेट केक का टुकड़ा है।

डेटाबेस

डेटाबेस को सिंक में रखने के लिए मैं http://www.red-gate.com/products/sql-development/sql-compare/ का उपयोग करता हूं

यदि सर्वर राउटर के गुच्छा के पीछे है और आप सीधे वीपीएन बनाने के लिए https://secure.logmein.com/products/hamachi2/ का उपयोग नहीं कर सकते हैं (जो SQL तुलना की आवश्यकता है) को कनेक्ट कर सकते हैं ।


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

5

मैं ज्यादातर ASP.NET ऐप को लिनक्स सर्वर पर तैनात करता हूं और यहां तक ​​कि सबसे छोटे बदलाव के लिए सब कुछ फिर से तैयार करता हूं। यहाँ मेरा मानक वर्कफ़्लो है:

  • मैं एक स्रोत कोड रिपॉजिटरी का उपयोग करता हूं (जैसे तोड़फोड़)
  • सर्वर पर, मेरे पास एक bash स्क्रिप्ट है जो निम्नलिखित कार्य करती है:
    • नवीनतम कोड की जाँच करता है
    • एक निर्माण करता है (DLL बनाता है)
    • आवश्यक के लिए फाइल को फ़िल्टर करता है (उदाहरण के लिए कोड फ़ाइलें हटाता है)
    • डेटाबेस का समर्थन करता है
    • वर्तमान तिथि के साथ नामित निर्देशिका में वेब सर्वर पर फ़ाइलों को जोड़ता है
    • डेटाबेस को अद्यतन करता है यदि कोई नया स्कीमा परिनियोजन में शामिल है
    • नए इंस्टॉलेशन को डिफ़ॉल्ट बनाता है इसलिए इसे अगली हिट के साथ परोसा जाएगा

चेकआउट को तोड़फोड़ के कमांड-लाइन संस्करण के साथ किया जाता है और भवन xbuild (मोनो परियोजना से एक जैसे काम करना) के साथ किया जाता है। ज़्यादातर मैजिक रिलीज़ इट में किया जाता है।

मेरे देव सर्वर पर मेरा अनिवार्य रूप से निरंतर एकीकरण है, लेकिन उत्पादन पक्ष में मैं वास्तव में सर्वर में एसएसएच करता हूं और स्क्रिप्ट चलाकर मैन्युअल रूप से तैनाती शुरू करता हूं। मेरी स्क्रिप्ट को चतुराई से 'परिनियोजित' कहा जाता है, इसलिए मैं बैश प्रॉम्प्ट पर टाइप करता हूं। मैं बहुत क्रिएटिव हूं। नहीं।

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

प्रारंभिक तैनाती में कुछ मिनट लगते हैं और एक पूर्व संस्करण में कुछ सेकंड लगते हैं।

यह मेरे लिए एक अच्छा समाधान रहा है और केवल तीन कमांड-लाइन उपयोगिताओं (svn, xbuild, और रिलीज़िट), DB क्लाइंट, SSH और बैश पर निर्भर करता है।

मुझे कुछ समय में कोडप्लेक्स पर रिलीज़ इट की कॉपी को अपडेट करना होगा:

http://releaseit.codeplex.com/


4

ASP.NET के लिए सरल XCopy। इसे ज़िप करें, सर्वर पर sftp करें, सही स्थान पर निकालें। पहली तैनाती के लिए, IIS की मैन्युअल स्थापना


4

आपके प्रश्नों का उत्तर देना:

  1. XCopy
  2. मैन्युअल
  3. स्थैतिक संसाधनों के लिए, हम केवल परिवर्तित संसाधन की तैनाती करते हैं।
    DLL के लिए हम परिवर्तित DLL और ASPX पृष्ठों को तैनात करते हैं।
  4. हाँ, और हाँ।

इसे अच्छा और सरल रखने से हमें अब तक सिरदर्द से बचा है।


4

क्या आप कुछ विशिष्ट उपकरणों या सिर्फ XCOPY का उपयोग कर रहे हैं? आवेदन कैसे पैक किया जाता है (ज़िप, एमएसआई, ...)?

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

जब पहली बार किसी एप्लिकेशन को तैनात किया जाता है तो आप ऐप पूल और वर्चुअल डायरेक्टरी को कैसे सेटअप करते हैं (क्या आप उन्हें मैन्युअल रूप से या किसी टूल से बनाते हैं)?

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

जब कोई स्थैतिक संसाधन बदलता है (CSS, JS या छवि फ़ाइल) क्या आप पूरे अनुप्रयोग या केवल संशोधित संसाधन को फिर से जोड़ते हैं? जब कोई असेंबली / ASPX पृष्ठ बदलता है, तो कैसे?

डिफ़ॉल्ट रूप से, कलाकृतियों को तैनात करने की प्रक्रिया सेट-अप होती है जैसे कि केवल संशोधित फ़ाइलों को लक्ष्य सर्वर पर स्थानांतरित किया जाता है - इसमें सीएसएस फाइलें, जावास्क्रिप्ट फाइलें, एएसपीएक्स पेज और लिंक्ड असेंबली से सब कुछ शामिल है।

क्या आप किसी दिए गए आवेदन के लिए सभी तैनात संस्करणों का ट्रैक रखते हैं और यदि कुछ गलत हो जाता है, तो क्या आपके पास एप्लिकेशन को पिछले ज्ञात कार्यशील राज्य में पुनर्स्थापित करने की प्रक्रिया है?

हां, बिल्डमास्टर हमारे लिए यह सब संभालता है। पुनर्स्थापना ज्यादातर एक पुराने बिल्ड प्रमोशन को फिर से निष्पादित करने के रूप में सरल है, लेकिन कभी-कभी डेटाबेस परिवर्तनों को मैन्युअल रूप से पुनर्स्थापित करने की आवश्यकता होती है, और डेटा हानि हो सकती है। मूल रोलबैक प्रक्रिया यहां विस्तृत है: http://inedo.com/support/tutorials/performing-a-deployment-rollback-with-buildmaster


3

वेब सेटअप / प्रोजेक्ट स्थापित करें - ताकि आप कुछ गलत होने पर इसे आसानी से अनइंस्टॉल कर सकें


3

अनफोल्ड एक कैपिस्ट्रानो जैसा तैनाती समाधान है जो मैंने .net अनुप्रयोगों के लिए लिखा था। यह वह है जो हम अपनी सभी परियोजनाओं पर उपयोग करते हैं और यह एक बहुत ही लचीला समाधान है। रोब कॉनरी द्वारा इस ब्लॉग पोस्ट में बताए गए .net अनुप्रयोगों के लिए यह अधिकांश विशिष्ट समस्याओं को हल करता है।

  • यह एक अच्छा "डिफ़ॉल्ट" व्यवहार के साथ आता है, इस अर्थ में कि यह आपके लिए बहुत सारे मानक सामान करता है: स्रोत नियंत्रण से कोड प्राप्त करना, निर्माण करना, एप्लिकेशन पूल बनाना, IIS स्थापित करना, आदि।
  • स्रोत नियंत्रण में क्या है के आधार पर रिलीज़
  • इसमें टास्क हुक है , इसलिए डिफ़ॉल्ट व्यवहार को आसानी से बढ़ाया या बदला जा सकता है
  • इसमें रोलबैक है
  • यह सब है powershell , इसलिए कोई बाहरी निर्भरता नहीं हैं
  • यह रिमोट मशीनों तक पहुंचने के लिए पॉवरशेल रेमोटिंग का उपयोग करता है

यहाँ एक परिचय और कुछ अन्य ब्लॉग पोस्ट हैं।

तो ऊपर दिए गए सवालों के जवाब देने के लिए:

  • आवेदन कैसे पैक किया जाता है (ज़िप, एमएसआई, ...)?

    लक्ष्य मशीन पर एप्लिकेशन प्राप्त करने के लिए Git (या एक और scm) डिफ़ॉल्ट तरीका है। वैकल्पिक रूप से आप एक स्थानीय निर्माण कर सकते हैं और पॉवरशेल रीमोटिंग कनेक्शन पर परिणाम की प्रतिलिपि बना सकते हैं

  • जब पहली बार किसी एप्लिकेशन को तैनात किया जाता है तो आप ऐप पूल और वर्चुअल डायरेक्टरी को कैसे सेटअप करते हैं (क्या आप उन्हें मैन्युअल रूप से या किसी टूल से बनाते हैं)?

    अनफोल्ड ने Powershell के WebAdministration मॉड्यूल का उपयोग करके एप्लिकेशन पूल और वेबसाइट एप्लिकेशन को कॉन्फ़िगर किया है। यह हमें (और आप) एप्लिकेशन पूल या वेबसाइट के किसी भी पहलू को संशोधित करने की अनुमति देता है

  • जब कोई स्थैतिक संसाधन बदलता है (CSS, JS या छवि फ़ाइल) क्या आप पूरे अनुप्रयोग या केवल संशोधित संसाधन को फिर से जोड़ते हैं? जब कोई असेंबली / ASPX पृष्ठ बदलता है, तो कैसे?

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

  • क्या आप किसी दिए गए आवेदन के लिए सभी तैनात संस्करणों का ट्रैक रखते हैं?

    हां, अनफोल्ड पुराने संस्करणों को चारों ओर रखता है। सभी संस्करण नहीं, बल्कि कई संस्करण। यह रोलिंग को लगभग तुच्छ बनाता है।


अच्छा है, लेकिन लक्ष्य मशीन से भंडार तक पहुंच की आवश्यकता है।
डेविड डी सी ई फ्रीटास

3

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

चेकइन पर, हमारा "सामान्य" निर्माण निम्नलिखित कार्य करता है:

  • जेनकिन्स कोड के नवीनतम संस्करण को लाने के लिए एक SVN अपडेट करता है
  • एक NuGet पैकेज रिस्टोर हमारे अपने स्थानीय NuGet रिपॉजिटरी के खिलाफ चल रहा है
  • आवेदन MsBuild का उपयोग कर संकलित किया गया है। इसे स्थापित करना एक साहसिक कार्य है, क्योंकि आपको अपने निर्माण बॉक्स पर सही MsBuild और फिर ASP.NET और MVC dll की स्थापना करनी होगी। (एक साइड नोट के रूप में, जब मेरे पास था<MvcBuildViews>true</MvcBuildViews> विचारों को संकलित करने के लिए अपनी .csproj फ़ाइलों में प्रवेश किया था, तो msbuild बेतरतीब ढंग से दुर्घटनाग्रस्त हो गया था, इसलिए मुझे इसे अक्षम करना पड़ा)
  • एक बार कोड संकलित करने के बाद यूनिट परीक्षण चलाए जाते हैं (मैं इसके लिए ननिट का उपयोग कर रहा हूं, लेकिन आप जो कुछ भी चाहते हैं उसका उपयोग कर सकते हैं)
  • यदि सभी यूनिट परीक्षण पास हो जाते हैं, तो मैं IIS ऐप पूल को रोक देता हूं, स्थानीय रूप से एप्लिकेशन (केवल कुछ बुनियादी XCOPY कमांड को आवश्यक फाइलों पर कॉपी करने के लिए) तैनात करता हूं और फिर IIS को पुनरारंभ करता हूं (मुझे IIS लॉकिंग फ़ाइलों के साथ समस्या थी, और यह हल हो गया यह)
  • मेरे पास प्रत्येक पर्यावरण के लिए अलग web.config फाइलें हैं; देव, उट, ठेस। (मैंने थोड़ी सफलता के साथ वेब परिवर्तन सामग्री का उपयोग करने की कोशिश की)। तो सही web.config फ़ाइल को भी कॉपी किया जाता है
  • मैं तब UI परीक्षणों का एक समूह निष्पादित करने के लिए PhantomJS का उपयोग करता हूं। यह विभिन्न रिज़ॉल्यूशन (मोबाइल, डेस्कटॉप) पर स्क्रीनशॉट का एक गुच्छा भी लेता है और प्रत्येक स्क्रीनशॉट को कुछ जानकारी (पेज शीर्षक, रिज़ॉल्यूशन) के साथ जोड़ देता है। जेनकिंस के पास इन स्क्रीनशॉट्स को संभालने के लिए बहुत समर्थन है और वे निर्माण के हिस्से के रूप में सहेजे गए हैं
  • एक बार एकीकरण यूआई परीक्षण पास सफल हो जाता है

अगर कोई "UAT में तैनात" पर क्लिक करता है:

  • यदि अंतिम बिल्ड सफल रहा, तो जेनकिन्स एक और एसवीएन अपडेट करता है
  • एप्लिकेशन को RELEASE कॉन्फ़िगरेशन का उपयोग करके संकलित किया जाता है
  • एक "www" निर्देशिका बनाई गई है और एप्लिकेशन को इसमें कॉपी किया गया है
  • मैं तो बिल्ड बॉक्स और UAT के बीच फाइल सिस्टम को सिंक्रनाइज़ करने के लिए wincp का उपयोग करता हूं
  • मैं UAT सर्वर पर एक HTTP अनुरोध भेजता हूं और सुनिश्चित करता हूं कि मुझे 200 वापस मिल जाएं
  • इस संशोधन को SVN में UAT-datetime के रूप में टैग किया गया है
  • अगर हमें यह मिल गया है, तो निर्माण सफल है!

जब हम "उत्पादन करने के लिए तैनात" पर क्लिक करते हैं:

  • उपयोगकर्ता एक UAT टैग का चयन करता है जिसे पहले बनाया गया था
  • टैग को "स्विच किया गया" है
  • कोड संकलित किया गया है और उत्पाद सर्वर के साथ समन्वयित किया गया है
  • सर्वर का निर्माण करने के लिए Http अनुरोध
  • इस संशोधन को SVN में प्रोडक्ट-डेटाइम के रूप में टैग किया गया है
  • रिलीज ज़िपित और संग्रहीत है

सभी निर्माण करने के लिए एक पूर्ण निर्माण के बारे में 30 सेकंड लेता है जो मैं बहुत, बहुत खुश हूँ।

इस समाधान के लिए ऊपर:

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

इस समाधान के लिए मुख्य निम्न हैं:

  • जब भी आप प्रोडक्शन के लिए रिलीज करते हैं तो आपको यूएटी को रिलीज करने की जरूरत होती है। यह एक सचेत निर्णय था जिसे हमने इसलिए किया क्योंकि हम हमेशा यह सुनिश्चित करना चाहते थे कि यूएटी हमेशा प्रोडक्ट के साथ बना रहे। फिर भी, यह एक दर्द है।
  • वहाँ काफी कुछ विन्यास फाइल के आसपास चल रहा है। मैंने जेनकिन्स में यह सब करने का प्रयास किया है, लेकिन प्रक्रिया के हिस्से के रूप में आवश्यक कुछ सहायता बैच फाइलें हैं। (ये भी जांचे गए हैं)।
  • DB अपग्रेड और डाउनग्रेड स्क्रिप्ट ऐप का हिस्सा हैं और ऐप स्टार्टअप पर चलते हैं। यह काम करता है (ज्यादातर), लेकिन यह एक दर्द है।

मैं कोई अन्य संभावित सुधार सुनना पसंद करूंगा!


2

2009 में वापस, जहां से यह उत्तर मिलता है, हमने अपने निरंतर एकीकरण बिल्ड्स के लिए क्रूज़कॉन्ट्रोल.नेट का उपयोग किया, जिसने रिलीज़ मीडिया का उत्पादन भी किया।

वहाँ से हमने स्मार्ट सिंक सॉफ़्टवेयर का उपयोग एक उत्पादन सर्वर से तुलना करने के लिए किया जो लोड संतुलित पूल से बाहर था, और परिवर्तनों को स्थानांतरित कर दिया।

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


एक उत्तर के बजाय एक विज्ञापन की तरह लगता है
अल्फ मोहन

1

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

हम संस्करण नियंत्रण के लिए TortoiseSVN का उपयोग कर रहे थे, और इसलिए निम्नलिखित को पूरा करने के लिए कई SVN कमांड में लिखने में सक्षम होना अच्छा था:

  • सबसे पहले, उपयोगकर्ता को नवीनतम संशोधन की जाँच करें। यदि नहीं, तो या तो उन्हें अपडेट करने के लिए संकेत दें या अपडेट को वहीं चलाएं और फिर।
  • "Synclog.txt" नामक सर्वर से एक टेक्स्ट फ़ाइल डाउनलोड करें जो यह बताती है कि SVN उपयोगकर्ता कौन है, वे किस संशोधन संख्या को अपलोड कर रहे हैं और अपलोड की तारीख और समय। वर्तमान अपलोड के लिए एक नई लाइन को जोड़ें और फिर इसे परिवर्तित फ़ाइलों के साथ सर्वर पर वापस भेजें। इससे यह पता लगाना बहुत आसान हो जाता है कि साइट का कौन सा संस्करण वापस बंद होने की संभावना है जो अपलोड होने के कारण समस्या पैदा करता है।

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

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

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


1

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

  • जरूरत पड़ने पर वापस लौटने की जल्दी
  • लॉकिंग समस्याओं से बचने के लिए IIS या ऐप पूल को रोकने की आवश्यकता नहीं है
  • समस्याओं के कारण पुरानी फ़ाइलों का कोई जोखिम नहीं
  • कम या ज्यादा शून्य डाउनटाइम (आमतौर पर नए एपडोमेन इनिशियल्स पर केवल एक विराम)

एकमात्र समस्या जो हमारे पास है वह है संसाधनों का कैश होना अगर आप ऐप पूल को पुनरारंभ नहीं करते हैं और स्वचालित एपडोमेन स्विच पर भरोसा करते हैं।

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