DevOps संबंधित कोड और कोड रिपॉजिटरी में कॉन्फिगर कैसे करें?


10

हम एक कंपनी के रूप में बढ़ रहे हैं, हमारे उत्पादों का विस्तार हो रहा है और हमारे DevOps संबंधित गतिविधियों और प्रयासों के रूप में अच्छी तरह से बढ़ रहे हैं - हमने बैम्बू से अधिक लचीले और विन्यास योग्य जेनकिंस में तैनाती पाइपलाइनों और अन्य प्लगइन्स का उपयोग करके स्विच किया है; Ansible पर स्विच किया गया और आंतरिक रूप से यहां और वहां डॉक का उपयोग करना शुरू कर दिया।

इन सभी चीजों के लिए कुछ स्तर की कोडिंग या कॉन्फ़िगरेशन की आवश्यकता होती है - Ansible स्क्रिप्ट्स और कॉन्फिग्स, जेनकिंस ग्रूवी स्क्रिप्ट्स, Dockerfiles और YAML कॉन्फिग्स।

अभी के लिए, हम के लिए उच्च स्तरीय निर्देशिका के साथ एक अलग "ऑप्स" भंडार बना लिया है jenkins, ansible, dockerऔर other(जो एक भयानक नाम है, लेकिन अब के लिए सभी "अन्य" DevOps स्वचालन चीजें देखते हैं)।

हमारा दृष्टिकोण सही नहीं लगता है और पैमाने नहीं हो सकता है, लेकिन एक कोड रिपॉजिटरी या रिपॉजिटरी में DevOps- संबंधित कोड को रखने के लिए सर्वोत्तम अभ्यास और सिफारिशें क्या हैं?


6
मैं "प्रत्येक भाग एक ऐप, एक रेपो प्रति ऐप" विधि के साथ जाता हूं, शेफ में इसका मतलब है कि 1 रेपो प्रति कुकबुक।
तेंसिबाई

@ टेंसिबाई ने कहा, मुझे डर था कि एक "ओप्स" रेपो जल्दी से अव्यवहारिक हो जाएगा। धन्यवाद।
alecxe

1
यह शेफ में कुकबुक मैनेजमेंट की विरासत का रूप रहा है, सभी रसोई की किताबों के साथ 1 रेपो और ज्यादातर मामलों में एक फुटगन साबित हुई है, इसलिए बदलाव के साथ मैं कम सहज हूं, यह कहना आसान होगा कि जेनकिंस पाइपलाइन (यदि 2) और docker files को उस प्रोजेक्ट के साथ रहना चाहिए जिसे वे IMO हैंडल करते हैं, और मुझे इस बात का कोई अंदाजा नहीं है कि आपने दूसरे के नीचे क्या रखा है इसलिए मैं वास्तव में यहाँ कोई सलाह नहीं दे सकता
Tensibai

@ तेंसिबाई को मिल गया! अन्य में ज्यादातर बाश और अजगर उपयोगिताओं या कई आंतरिक उपकरणों के लिए समय-समय पर निष्पादित स्क्रिप्ट शामिल हैं..वे वास्तव में कहीं भी फिट नहीं होते हैं और हम "अन्य" की तुलना में बेहतर जगह के बारे में नहीं सोच सकते थे .. मैं देखूंगा कि क्या मैं सामग्री पोस्ट कर सकता हूं निर्देशिका में सवाल के रूप में अच्छी तरह से। धन्यवाद।
20

1
मैं उन्हें काम के 'आत्मीयता', ऐप X पर काम करने वाली लिपियों के साथ कई रेपो में विभाजित कर सकता हूं, आपके पास दो ऐप्स पर उपयोग की जाने वाली स्क्रिप्ट हो सकती है, लेकिन यदि ऐप एक तरह से स्क्रिप्ट को बदलना है तो वह किस ऐप से बात करता है , दो अलग-अलग संस्करणों के लिए बेहतर है, इसलिए एटीईओटीडी मैं उन्हें उस एप्लिकेशन के साथ संग्रहीत करूंगा जो वे संबंधित हैं या यदि वे प्रति कार्य एक विशिष्ट भंडार में आवेदन को गुणा करते हैं, तो आपके पास हमेशा तैनात अनुप्रयोगों के अनुरूप एक संस्करण है और आप डॉन एक ही समय में एक असंबंधित स्क्रिप्ट को टैग करने की आवश्यकता नहीं है।
तैंसीबाई

जवाबों:


4

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

इसका कारण यह है कि हम कलाकृतियों पर विचार करना चाहते हैं ( उदाहरण के लिए एक डॉकटर या सॉफ्टवेयर पैकेज) निम्नलिखित क्रियाओं की वस्तुओं के रूप में:

  • निर्माण
  • परीक्षा
  • तैनाती

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

उदाहरण के लिए, एक वेबसाइट और एक माइक्रो-सर्विस "a" के लिए कोड वाले एक रिपॉजिटरी में निम्नलिखित उप-निर्देशिकाएं हो सकती हैं जो संचालन के लिए समर्पित हैं:

./ops/website
./ops/micro-service-a

प्रत्येक में तीन स्क्रिप्ट्स होती हैं build, testऔर deploy। अब जब ऑटोमेशन आइटम के संगठन को किसी तरह स्पष्ट किया गया है, तो आइए हमारा ध्यान विन्यास पर दें।

कॉन्फ़िगरेशन संगठन के बारे में मुख्य शर्तें और आवश्यकताएं deployएक सेवा की तरह कलाबाजी पर लागू होने पर क्रिया द्वारा निर्धारित की जाती हैं । deployक्रिया निम्न पैरामीटर होना चाहिए:

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

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


5

मैं बाउट डॉकटर को जवाब दे सकता हूं, डॉक का उपयोग करने के लिए सबसे अच्छे अभ्यास में से एक है डॉक फाइल और प्रोजेक्ट के समान रिपॉजिटरी में फाइलों को कंपोज करना, इसलिए जहां भी आप प्रोजेक्ट को क्लोन करते हैं आप डॉक इमेज का निर्माण कर सकते हैं, और यह अच्छा है docker के कई संस्करण रखें उदाहरण के लिए फाइलें (prod, staging, dev) ताकि आप छवि का निर्माण कर सकें और प्रत्येक env के लिए विशिष्ट विकल्प के साथ कंटेनर को चला सकें उदाहरण के लिए dev मशीन के लिए आप विशिष्ट नेटवर्क का उपयोग कर सकते हैं और अधिक निर्भरता कंटेनर या जो भी चला सकते हैं।


4

प्रत्येक उपकरण का कोड अपने ही रेपो में जाता है। उदाहरण के लिए

  1. जेनकिंस रेपो में जेनकिंस ग्रूवी टेम्पलेट
  2. अपने स्वयं के रेपो (भूमिकाओं, कार्यों, इन्वेंट्री उप निर्देशिकाओं) के साथ Ansible YAML प्लेबुक
  3. अपने स्वयं के रेपो में क्लाउडफॉर्म / टेम्परफॉर्म टेम्प्लेट
  4. Docker अपने आप में फ़ाइलें 5 .. और इसी तरह

यह प्रक्रिया ऑर्केस्ट्रेशन और प्रत्येक वातावरण के लिए विभिन्न शाखाओं को बनाए रखने के मामले में आपको बेहतर बनाने में मदद करेगा

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

उदाहरण के लिए, आपके पास उत्पादन (मास्टर शाखा) में चलने योग्य V2.1 का उत्पादन हो सकता है, लेकिन उत्पाद (मास्टर शाखा) में चल रहे डॉक कंटेनर के V2.0

इसी तरह अपनी DB स्क्रिप्ट / बैश स्क्रिप्ट को अपने रिपॉजिटरी में रखें और हो सकता है कि ट्रैकिंग और ऑटोमैटिक उद्देश्यों के लिए प्रत्येक तैनात URL में सभी टूल / पार्ट्स के वर्जन को दिखाने के लिए आपके पास एक Healthcheck फाइल (JSON / YAML) हो। (ताकि आपके webhooks URL को पढ़ लें और तैनाती को स्वचालित करें)


2
इस दृष्टिकोण का नुकसान है, v2.1 क्यूए में है और मान्य नहीं है और आपको उत्पादन को तुरंत पैच करना होगा, आप v2.0 को संशोधित नहीं कर सकते हैं और यदि आप इस पैच के लिए v2.2 बनाते हैं तो इसके होने का उच्च जोखिम है जब v2.1 उत्पादन में चला जाता है या खो दिया जाता है, तो रेपो में अलग-अलग कोड की मात्रा से गुणा किया जाता है और आपके पास जल्द ही
बैकपोर्स का

3
पर्यावरण / परिनियोजन-विशिष्ट जानकारी का ट्रैक रखने के लिए शाखाओं का उपयोग करना मेरे लिए एक प्रतिमान की तरह दिखता है: यदि हमारे पास 20 वातावरण हैं, तो इसका मतलब है कि सिंक में रखने के लिए हमारे पास 20 शाखाएँ हैं ... त्रुटियों और भ्रम की संभावना स्रोत। क्या आप बता सकते हैं कि आप पर्यावरण / परिनियोजन-विशिष्ट सूचनाओं पर नज़र रखने के लिए कॉन्फ़िगरेशन फ़ाइलों का उपयोग क्यों नहीं करते हैं और इन शाखाओं के साथ आपका वर्कफ़्लो क्या काम कर रहा है? ये तुच्छ समस्याएँ नहीं हैं!
माइकल ले बारबियर ग्रुएनवाल्ड 13

3

ऑप्स, देव और DevOps के बीच अंतर करना अलगाव को बढ़ावा देता है और "दीवार पर फेंक" मानसिकता को लागू करता है। टीमों के बीच सहयोग बढ़ाने के लिए, एक परियोजना के निर्माण और तैनाती के लिए एक भंडार में सब कुछ डाल देना चाहिए।

कहा गया है कि, सवाल का जवाब:

DevOps संबंधित कोड और कोड रिपॉजिटरी में कॉन्फिगर कैसे करें?

क्या यह है कि यदि परियोजना को चलाने के लिए विन्यास आवश्यक है तो उसे उसी निर्देशिका में रखना चाहिए।

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