अपने काम के विकास के माहौल के साथ पिछली परियोजनाओं को रखने का प्रभावी तरीका?


19

मुझे लगता है कि जब भी मैं एक पिछले प्रोजेक्ट को चलाना चाहता हूं, तो मुझे इसे ढूंढने से पहले एक लंबा समय लगेगा और इससे पहले कि मैं इसे चलाने के लिए सक्षम होने के लिए सब कुछ फिर से सेट-अप करूं।

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

क्या किसी के पास इस मुद्दे को संभालने का एक प्रभावी तरीका है? अब तक मैंने केवल स्रोत कोड को वापस रखने के साथ खुद को चिंतित किया है, फिर भी काम के विकास के माहौल को फिर से स्थापित करना मुश्किल है और साथ ही साथ काम के विकास के माहौल को बनाए रखना भी मुश्किल है


6
NSA मेरा बैकअप है
स्टेफी

जवाबों:


17

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


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

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

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

11

मेरी वर्तमान पसंदीदा कार्यप्रणाली एक स्क्रिप्ट को बनाए रखना है जो किसी प्रोजेक्ट के लिए सभी आवश्यक निर्भरताएं स्थापित करता है, स्रोत डाउनलोड करता है, और सब कुछ हुक करता है। कुछ स्क्रिप्ट में दो मोड होते हैं - एक प्रोडक्शन के लिए, जो आमतौर पर दूसरे मोड के बहुत ज्यादा सबसेट होता है: डेवलपमेंट।

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

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

लाभ यह है कि एक नई मशीन और / या उत्पादन सर्वर पर तैनात करना बहुत आसान है, यह स्क्रिप्ट में सभी प्रलेखित है, और स्क्रिप्ट अक्सर सत्यापित होती है।


4

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

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

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

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

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

प्रत्येक प्रणाली (और विविधताएं) सेट होने में थोड़ा सा समय लेती हैं, लेकिन कुछ स्पष्ट मूल्य हैं यदि आप एक सामान्य कार्य के लिए पुनः लोड करने और पुन: कॉन्फ़िगर करने का कार्य पाते हैं।


कृपया अपने विवरण में आपके द्वारा बताई गई रणनीति का विस्तार कर सकते हैं "लेकिन यह पर्याप्त है कि अक्सर एक अलग रणनीति की आवश्यकता होती है"? मैं अपने स्रोत कोड के रिपॉजिटरी में Vagrant का उपयोग करने और VM कॉन्फ़िगरेशन को संग्रहीत करने जा रहा था, और सोच रहा था कि इसे किस बिंदु पर अलग तरीके से व्यवहार करना होगा?
CL22

3

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

Docker का उपयोग करके यह आपके वर्कफ़्लो के अन्य भागों को भी बेहतर बना सकता है:

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

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


2

अधिकांश सिस्टम (भाषा, रनटाइम या ऑपरेटिंग सिस्टम) में सॉफ़्टवेयर और कॉन्फ़िगरेशन को स्थापित करने का कुछ मानकीकृत तरीका है, इसलिए उन का उपयोग करने का प्रयास करें। जैसे कि:

  • जावा के लिए मावेन या ग्रैडल
  • पर्ल के लिए सीपीएएन
  • रेडहैट / फेडोरा के लिए आरपीएम
  • लिनक्स के लिए dpkg / apt-get
  • विंडोज के लिए MSI पैकेज

फिर इंस्टॉलेशन निर्देश बताएं कि वास्तव में क्या स्थापित करना है / क्या कदम आवश्यक हैं:

  • आपके द्वारा स्थापित किए जाने वाले (बेस ओएस, बेस रनटाइम जैसे जावा / पर्ल / पायथन ...) के बारे में संक्षिप्त निर्देश प्रदान करें।
  • एक छोटी स्क्रिप्ट लिखें जो आवश्यक संस्थापन करती है (आदर्श रूप से मावेन जैसे उपकरण का केवल एक एकल आह्वान)
  • इसे ताज़े इंस्टाल पर टेस्ट करें (जैसे VM पर)

फिर आपको पर्यावरण को फिर से बनाने में सक्षम होना चाहिए, और दूसरों को भी ऐसा करने में सक्षम होना चाहिए (जो कि महत्वपूर्ण हो सकता है यदि यह एकल परियोजना नहीं है)।

आपको आवश्यक इंस्टॉलेशन पैकेज को कहीं स्टोर करने की आवश्यकता हो सकती है, या आप केवल डाउनलोड निर्देश शामिल कर सकते हैं (जब तक कि सिस्टम उन पर नज़र नहीं रखता है, जैसे कि apt-get या Maven)। यह इस बात पर निर्भर करता है कि आप पैकेज के प्रदाताओं पर कितना भरोसा करते हैं - शायद कोर डेबियन पैकेजों को संग्रहीत करने की कोई आवश्यकता नहीं है, लेकिन कुछ छोटे मुफ्त सॉफ्टवेयर प्रोजेक्ट के साथ, यह एक अच्छा विचार हो सकता है।

वीएम समाधान भी काम करेगा, और शायद कम समय में कम काम है (बस वीएम रखें)। हालांकि, मुझे लगता है कि यह समाधान अधिक लचीलापन प्रदान करता है, उदाहरण के लिए पर्यावरण को बदलते समय।

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