टीम के माहौल में शेफ कुकबुक का प्रबंधन करें


13

मैं महाराज सीख रहा हूं और अपनी टीम के साथ काम करने के लिए सब कुछ संरचित कर रहा हूं।

शुरुआत के लिए, ऐसा लगता है कि आपको एक शेफ-रेपो फ़ोल्डर बनाना चाहिए, जहां आप अपने नोड्स को प्रबंधित करने के लिए उपयोग किए गए कुकबुक को संग्रहीत और संशोधित करेंगे।

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

हालांकि, शेफ-रेपो फ़ोल्डर में मुझे अपने चाकू विन्यास और मेरी प्रमुख मान्यताओं के साथ एक कॉन्फ़िगरेशन फ़ोल्डर (.chef) जोड़ना होगा, और ये मेरे लिए विशिष्ट हैं। क्या केवल .chef फ़ोल्डर को gitignore फ़ाइल में जोड़ना सामान्य है?

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

सहायता के लिए धन्यवाद!


क्या आप .chefपर्यावरण चर या कुछ और का उपयोग करने के लिए फ़ोल्डर सेट कर सकते हैं ?
ceejayoz

क्या आप कृपया अपने लक्ष्य का अधिक विस्तार से वर्णन कर सकते हैं? शेफ का उपयोग करके आप किस तरह का बुनियादी ढांचा तैयार करना चाहते हैं? आपने विभिन्न शाखाओं का उल्लेख किया है - यदि आप सॉफ़्टवेयर परिनियोजन के बारे में बात कर रहे हैं, तो जेनकिंस जैसे सीआई उपकरण बेहतर समाधान हो सकते हैं।
19

यह कितना अच्छा है कि कठपुतली इस तरह से पर्यावरण का समर्थन करता है, मूल रूप से।
टॉम ओ'कॉनर

जवाबों:


15

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

वैश्विक के बजाय ~/.chef, मैं शेफ-रेपो के भीतर '.chef' उपनिर्देशिका का उपयोग करता हूं, जिसे गिट में संग्रहीत नहीं किया जाता है (इसे जोड़ा जाता है .gitignore)। मेरे पास फ़ाइल config/knife.rbफ़ाइल भी है जिसे Git में चेक किया गया है और इसमें साझा कॉन्फ़िगरेशन है। यह इस स्निपेट के साथ शुरू होता है:

root_dir = File.join(File.dirname(__FILE__), '..')
%w(knife-secrets.rb knife-local.rb).each do |conf_name|
  conf = File.join(root_dir, ".chef", conf_name)
  Kernel::load(conf) if File.exists? conf
end

यह .chef/knife-local.rbकस्टम कॉन्फ़िगरेशन वाली फ़ाइलों को लोड करता है (मूल संस्करण में यह केवल OPSCODE_USER='username'निरंतर है जो बाद में उपयोग किया जाता है, लेकिन इसमें कोई भी चाकू कॉन्फ़िगरेशन हो सकता है), और .chef/knife-secrets.rbजिसमें साझा रहस्य (एडब्ल्यूएस कुंजी आदि) शामिल हैं।

नीचे, नियमित रूप से चाकू विन्यास है जो इन फाइलों में परिभाषित स्थिरांक का उपयोग करता है, जैसे:

client_key               "#{root_dir}/.chef/#{OPSCODE_USER}.pem"

इस तरह, मैं कंपनी भर में चाकू के विन्यास के स्टैंडराइजेशन को प्राप्त करता हूं, जिसका अर्थ है कि विकी में साझा किया गया कोई भी कोड स्निपेट या चाकू आह्वान सभी के लिए काम करेगा। चाकू में पर्याप्त भ्रम और जादू है - अलग-अलग विन्यास केवल इसे बदतर बना देगा। इसके अलावा, सभी को छोटे जादू के स्निपेट्स का लाभ मिलता है, जैसे कि यहknife ssh उपयोगकर्ता में उपयोग किए गए लॉगिन को कॉन्फ़िगर करने के लिए है~/.ssh/config

साझा रहस्यों का भी मुद्दा है: शेफ सर्वर की सत्यापन कुंजी, AWS कुंजी को संग्रहीत knife-secrets.rb, EC2 की SSH निजी कुंजी, एन्क्रिप्टेड डेटा बैग कुंजियाँ, और इसी तरह। हम निश्चित रूप से नहीं चाहते हैं कि उन्हें भंडार में संग्रहीत किया जाए - या, वास्तव में, कहीं भी जहां वे सुरक्षित रूप से एन्क्रिप्ट नहीं किए गए हैं। इसलिए हम उन फाइलों को एक .tar.gzफाइल के रूप में वितरित करते हैं , जो कंपनी में सभी के लिए GPG-एन्क्रिप्टेड है, और ड्रॉपबॉक्स पर साझा की गई है।

यह सब कॉन्फ़िगर करना जटिल हो रहा है, और मैं चाहता हूं कि टीम के लोग वास्तव में इस चीज का उपयोग करें, इसलिए अंतिम तत्व है: rake initकार्य जो .chefनिर्देशिका बनाता है , config/knife.rbसहानुभूति पैदा करता है , डिक्रिप्ट करता है और chef-secrets.tgzफ़ाइल को खोल देता है, सुनिश्चित करता है कि उपयोगकर्ता की निजी ऑप्सकोड प्लेटफ़ॉर्म कुंजी है और .chef/knife-local.rbठीक से है कॉन्फ़िगर किया गया है, चाकू प्लगइन्स को सहानुभूति देता है, और निर्देशिका और फाइलों के अंदर उचित अनुमतियाँ सेट करता है। यह कार्य सेट किया गया है, ताकि इसे पहले से ही प्रारंभिक रिपॉजिटरी (उदाहरण के लिए रहस्य या चाकू प्लगइन्स को अपडेट करने के लिए) पर कई बार चलाने के लिए सुरक्षित हो।

एक सहायक कार्य भी है जो सभी रहस्यों को दोहराता है, सभी के लिए तारबॉल को एन्क्रिप्ट करता है, और इसे ड्रॉपबॉक्स में कॉपी करता है, जिससे नए कर्मचारियों को जोड़ना या रहस्य बदलना आसान हो जाता है।

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


विस्तृत उत्तर के लिए धन्यवाद। काम को देखते हुए जो इसे कम से कम स्थापित करने में जाता है इसका मतलब है कि मुझे कुछ स्पष्ट याद नहीं है ...
एलेक्स रेकेरी

3

आपको दो बावर्ची सर्वर स्थापित करने की आवश्यकता है, एक उत्पादन के लिए और एक विकास के लिए। कारण यह है कि कोई भी शेफ सर्वर शाखित विकास का समर्थन नहीं कर सकता है; पर्यावरण के साथ भी।

या आप शेफ सर्वर अवधारणा को छोड़ सकते हैं और शेफ-सोलो का उपयोग कर सकते हैं। आप Git में अपनी रसोई की किताबें रख सकते हैं। आप शाखा और विलय कर सकते हैं। आप चाकू क्रेडेंशियल्स के साथ समस्याओं को अनदेखा कर सकते हैं क्योंकि आप उन्हें किसी भी अधिक उपयोग नहीं करेंगे।

आप चाकू खोज या डेटा बैग का उपयोग करने में सक्षम नहीं होंगे **। लेकिन कुछ लोगों को वैसे भी उन सुविधाओं की आवश्यकता नहीं होती है।

** अच्छी तरह से आप कर सकते हैं: http://wiki.opscode.com/display/chef/Data+Bags#DataBags-UsingDataBagswithChefSolo


2

मेरे घर में दो निर्देशिकाएं हैं, .chef और शेफ-रेपो। शेफ-रेपो जीआईटी में हैं। .Chef कुछ निजी निर्देशिका है जो चाकू के लिए डिफ़ॉल्ट है। आपको अपने रहस्यों को .chef से गिट में डालने की ज़रूरत नहीं है; चाकू ~ / .chef के लिए दिखेगा।


2

आपकी ~ / .chef निर्देशिका गिट रेपो में नहीं होनी चाहिए।

मेरे पास एक ~ / प्रोजेक्ट / निर्देशिका है जिसके तहत मैं अपना शेफ रेपो रखता हूं। इसमें मेरे सर्वर के कॉन्फिगर हो जाते हैं।

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

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

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