क्या यह एक अच्छा विचार है कि अपने सर्वर पर मर्क्यूरियल इंस्टॉल करें और एचजी को तैनात करने के लिए खींचें?


13

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

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

तो अभी यह हमारे काम करने का तरीका है:

º----------BitBucket
º---------/
º--------/

खुद को और hg pullBitBucket के तीन अन्य डेवलपर्स , हमारे परिवर्तन करें, फिर hg pushBitBucket को।

अब तैनाती के लिए, किसी को उत्पादन सर्वर की ओर नवीनतम फ़ाइलों को एफ़टीपी करने की आवश्यकता होगी।

मैं अपने सर्वर पर मर्क्यूरियल को स्थापित करने, और hg cloneबाद में hg pullउत्पादन पर संस्करणों को बनाए रखने के लिए उपयोग करने के बारे में सोच रहा था ।

º---push->-----BitBucket----<-pull-----º (production server)
º---push->----/
º---push->---/

यह एक अच्छा विचार है? कोई संभावित नुकसान जो मैं नहीं देख रहा हूँ? क्या यहाँ किसी ने कुछ ऐसा ही किया है? आप एक बड़े PHP फ्रेमवर्क एप्लिकेशन को कैसे लागू करते हैं (हम Moodle का उपयोग कर रहे हैं)?


यह कमाल का आइडिया है। आपको संदेह क्यों है?
निकोले फोमिनीह

यह एक ऐसी प्रक्रिया है जिसे बहुत से लोग करते हैं और इसे "सामान्य" मानते हैं, जिसे Microsoft ने अब अपने ऐज़्योर सेवा में तैनात Git (भविष्य में hg समर्थन के साथ) करने के लिए समर्थन में बनाया है।
एलन नाई

जवाबों:


12

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

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


10

मन कि यह तैनाती की रणनीति परमाणु नहीं है। ऐसा हो सकता है कि कुछ फाइलें पहले से ही अपडेट हैं जबकि अन्य फाइलें अभी भी पुरानी स्थिति में हो सकती हैं जबकि एप्लिकेशन हिट हो रही है। यह अप्रत्याशित दुष्प्रभाव पैदा कर सकता है।

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


3
आप आसानी से रोलबैक कर सकते हैं, यह वीसीएस की बात है।
राब

1
जरूरी नहीं है - फिर आपको कॉन्फ़िगरेशन या कुछ उत्पन्न फ़ाइलों को रखने की आवश्यकता है जो VCS में संस्करण और सिस्टम पर निर्भर हो सकते हैं। इसके अतिरिक्त आपको टैग्स का उपयोग करना होगा (जो कि प्रश्न में वर्णित प्रक्रिया में उल्लेख नहीं किया गया है) किसी ज्ञात कार्यशील संस्करण में वापस आने के लिए ईले को।
जोहान्स

2

एक और (मेरी राय में बेहतर) संभावना: एक बिल्ड सर्वर / निरंतर एकीकरण सर्वर का उपयोग करें।

संक्षिप्त संक्षिप्त विवरण: यह एक सर्वर है (इन-हाउस हो सकता है, इंटरनेट पर होने की आवश्यकता नहीं है) जिसे आप अपने रिपॉजिटरी पर नजर रखने के लिए सेट करते हैं, और जब भी रेपो में नए बदलाव होते हैं, सर्वर आपका कोड बनाता है ( AFAIK यह PHP में आवश्यक नहीं है) , इकाई परीक्षण चलाता है और वेब सर्वर पर आपके कोड को तैनात करता है।

अधिक जानकारी के लिए, इन लिंक की जाँच करें:

वहाँ बाहर CI के लिए विभिन्न उत्पादों के एक बहुत हैं , लेकिन केवल एक ही मैंने अब तक का उपयोग किया है TeamCity है । स्थापित करना बहुत आसान है ... वास्तव में, यह पहला ऐसा है जिसे मैंने कोशिश की थी, और मुझे यह इतना पसंद आया कि मैं इसके साथ चिपका रहा।


वैकल्पिक सस्ते समाधान:

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

असल में, यह एक बिल्ड सर्वर के समान है, केवल सरल है।


कोई फर्क नहीं पड़ता कि आप वास्तव में इसे आखिर में कैसे हल करते हैं ... इसे किसी भी तरह से स्वचालित करना सुनिश्चित करें!

आप एक सिंगल क्लिक के साथ / एक कमांड टाइप करके तैनात करना चाहते हैं, ताकि हर कोई इसे बिना कुछ खास जाने, और बिना गलती किए - यहां तक ​​कि आपदा की स्थिति में या तनाव में भी कर सके।


1

हम ऐसा करते हैं, या इसके समान चीजें। Nonatomic @johannes में कोण एक मुद्दा है, हालांकि यथार्थवादी शब्दों में यह इतनी तेजी से होता है कि यह ठीक होना चाहिए और इसके चारों ओर ऐसे तरीके हैं जैसे वह बताते हैं।

संभवतः इस गैर-परमाणु से अधिक महत्वपूर्ण "आप डेटाबेस स्कीमा अपडेट कैसे प्रबंधित करते हैं" होगा - इस तरह से खराब कोड को लागू करना उस आसान को ठीक करता है। बड़ा मुद्दा यह है कि जब आप डेटाबेस को वापस रोल करने की इच्छा रखने वाले डेटाबेस को अपडेट करते हैं। या यदि आप खराब अपडेट कर रहे हैं और डेटा दूषित कर रहे हैं।

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


1

यह एक महान विचार है, हालांकि निम्नलिखित को ध्यान में रखें:

  • सर्वर पर कमिट करने की कोशिश न करें (हालांकि कुछ दुर्लभ समय ऐसा करने के लिए समझ में आता है, जैसे कि एक प्लगइन स्थापित करना या सामग्री संपत्ति जोड़ना)
  • परीक्षण के लिए स्टेजिंग सर्वर या द्वितीयक रिपॉजिटरी परिनियोजन का उपयोग करें
  • हमेशा सावधान रहें कि hg update -Cउत्पादन को प्रभावित न करें (अर्थात महत्वपूर्ण फ़ाइलों को हटाएं)
  • एक उत्पादन और एक विकास शाखा है, केवल उत्पादन शाखा की तैनाती करें
  • संपत्तियों को बैकअप के रूप में मानें (उदाहरण के लिए सामग्री के लिए चित्र), और उपयोगकर्ता डेटा (जैसे संलग्नक / अपलोड, कैश, आदि) को अनदेखा करें
  • हमेशा hg statusसर्वर पर एक साफ आउटपुट होता है (यह आपको यह सुनिश्चित करने में मदद करेगा कि आप चीजों को कैश के रूप में अनदेखा कर रहे हैं)
  • वेब फ़ोल्डर में रिपॉजिटरी की तैनाती न करें। सार्वजनिक स्थान के बाहर से साइमलिंक का उपयोग करें (जैसे ln -s / myrepo / src / web / public_html / myo)
  • कॉन्फ़िगरेशन फ़ाइलों (विशेष रूप से डेटाबेस पासवर्ड या अन्य के साथ) से सावधान रहें
  • उत्पादन बैकअप के बजाय उपयोग न करें, यह उत्पादन कोड के लिए एक विकास बैकअप है , न कि उत्पादन डेटा

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

मैं कुछ मिल गया साइटों कई बार काट दिया, मर्क्युरियल में मदद करता है मुझे होने लिया है litterally सिर्फ एक जारी करके इस हैक्स पूर्ववत hg update -Cसर्वर (बेशक आप एक ऐसा करने के लिए चाहते हो सकता है में hg statusऔर बाद में विश्लेषण के लिए प्रभावित फ़ाइलें प्राप्त)।

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