प्रभावी रूप से विन्यास से देव तक के परिवर्तन पर नज़र रखना


9

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

निम्नलिखित मानते हुए:

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

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

उदाहरण के लिए, मान लें कि देव टीम अपने वातावरण में application.properties में कुछ प्रमुख-मूल्य जोड़े जोड़ती है। इन नई कुंजियों को रिकॉर्ड करने का सबसे अच्छा तरीका क्या होगा, ताकि जब ऑप्स टीम में तैनाती होती है, तो उन्हें पता हो कि वास्तव में किन कुंजियों को जोड़ना है, इसलिए नई सेवा को शुरू करने और लापता कुंजी के कारण विफल होने का जोखिम कम से कम है?

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


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

पूर्ण क्रॉस फ़ंक्शनल टीमें कुछ वातावरणों में प्राप्त करना कठिन हो सकता है जहां सुरक्षा एक प्रमुख बाधा है।
मैथ्यू फोर्टिन

मुझे पता है @MathieuFortin। इसीलिए मैंने टिप्पणी की और उत्तर देने के बजाए इसे "स्नार्की उत्तर" के साथ पूर्ववर्ती कर दिया। यह मेरा आदर्श समाधान है, लेकिन ऐसा नहीं है जो आपके लिए दुख की बात है।
रबरडुक

जवाबों:


3

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

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

उदाहरण के लिए, हम कहते हैं कि देव टीम अपने वातावरण में application.properties के लिए कुछ प्रमुख-मूल्य जोड़े जोड़ती है। इन नई कुंजियों को रिकॉर्ड करने का सबसे अच्छा तरीका क्या होगा, ताकि जब ऑप्स टीम में तैनाती होती है, तो उन्हें पता हो कि वास्तव में किन कुंजियों को जोड़ना है, इसलिए नई सेवा को शुरू करने और लापता कुंजी के कारण विफल होने का जोखिम कम से कम है?

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

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

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

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


0

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

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

उचित समय पर अन्य वातावरणों के लिए कॉन्फ़िगर फ़ाइलों को अद्यतन करने के लिए टीम के सदस्यों पर निर्भर था। जब उत्पादन के लिए अद्यतन करने का समय था, तो बिल्ड टीम को देव टीम लीड से एक स्पष्ट अनुरोध के माध्यम से फ़ाइल को अपडेट करना पड़ा, हालांकि आमतौर पर अनुरोध "QA1 से PROD के लिए app.config फ़ाइल की प्रतिलिपि" जैसा दिखता था। पासवर्ड जैसी संवेदनशील चीजें एक अलग कॉन्फिग फाइल में थीं, और फिर, केवल बिल्ड टीम ही प्रोडक्शन पासवर्ड फाइल को एक्सेस कर सकती थी। अंतर यह था कि डेवलपर्स आमतौर पर नहीं थेपासवर्ड फ़ाइलों में परिवर्तन का अनुरोध करें क्योंकि उनके पास उत्पादन पासवर्ड नहीं होगा। एक ही समय में वे निर्माण टीम से इसे अपडेट करने के लिए कहेंगे जब एक नई सेवा के लिए एक नया पासवर्ड जोड़ रहा था। और फिर भी, डेवलपर्स शायद प्रोडक्शन पासवर्ड नहीं जानते हैं, उन्हें केवल फ़ाइल में जोड़ने की कुंजी पता होगी (जैसे कि "newService2.password")।

इस तकनीक का प्रबंधन करने के लिए इस्तेमाल किया गया था जेनकिंस। एक इन-हाउस टूल भी था जिसका उपयोग जेनकिन्स के माध्यम से निर्माण और अनुरोध करने के लिए किया गया था।

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