2011-06-29 19 views
8

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

मुझे लगता है कि मैं विभिन्न वातावरणों (जैसे टोपी देव तैनाती बनाम टोपी प्रोड तैनाती) पर तैनात करने के लिए कैपिस्ट्रानो के लिए बहुस्तरीय घटक का उपयोग करूंगा।

यह प्रत्येक पाइपलाइन चरण के लिए भूमिकाओं का उपयोग करने के लिए अंतर्ज्ञानी भावना भी प्रतीत होता है। हालांकि, प्रत्येक चरण पाइपलाइन के बाकी हिस्सों से काफी स्वतंत्र रूप से चलता है, इसलिए प्रत्येक चरण को अन्य चरणों से स्वतंत्र रूप से पुनरारंभ/तैनात किया जा सकता है। ऐसा लगता है कि Capistrano स्पष्ट रूप से केवल एक विशिष्ट भूमिका के लिए चल रहे कार्यों का समर्थन करता है। ऐसा करने का एक अच्छा तरीका क्या है?

विशेष रूप से प्रत्येक भूमिका के लिए इस परिभाषित कार्यों को करने का सबसे अच्छा तरीका है? क्या होगा यदि भूमिकाओं के बीच कुछ कार्य आम हैं? शायद सहायक तरीके क्या जवाब है?

उत्तर

1

चेक इस चर्चा Creating a Capistrano task that performs different tasks based on role

task :stop_memcached, :roles => :memcache do 
... 
end 
+0

का उल्लेख नहीं कर सकते हैं जो मैं ढूंढ रहा हूं। उदाहरण के लिए, अगर मैं एक काम की तरह था: ' कार्य: clear_logs रन" rm -f /tmp/blah.log " अंत ' एक तैनाती के हिस्से के रूप में, मैं पर इसे चलाने के लिए चाहते हो जाएगा करते हैं मेरे सभी मशीनें अगर मैं अपनी पाइपलाइन में सभी चरणों को तैनात कर रहा था। लेकिन अगर मैं केवल पाइपलाइन के चरण 2 को तैनात कर रहा हूं, तो मैं केवल उन सभी मशीनों पर लॉग साफ़ करना चाहता हूं जिनमें चरण 2 की भूमिका है। जिन भूमिकाओं का सामना करना पड़ रहा है, उनमें समस्या यह है कि वे कौन सी मशीनों को कार्य चलाने के लिए निर्दिष्ट करते हैं, लेकिन आप यह निर्दिष्ट नहीं कर सकते कि वास्तव में उन्हें चलाने के लिए या किसी विशेष परिनियोजन के लिए नहीं। – JZC

3

सुनिश्चित नहीं हैं कि वास्तव में यह है कि आप क्या ढूंढ रहे हैं, लेकिन जब मैं सिर्फ एक विशेष भूमिका के लिए कुछ करना चाहता हूँ, मैं Capistrano खोल का उपयोग करें। उदाहरण के लिए, मान लीजिए कि मैं तैनात करने के लिए चाहते हैं, लेकिन केवल मेरे ऐप सर्वरों के लिए, मैं निम्नलिखित कर सकते हैं:

cap production shell 
cap>with app 
cap>!deploy #or any other cap task you have 

तुम भी मशीन द्वारा गुंजाइश अगर तुम चाहते हो सकता है। फिर:

cap production shell 
cap>on <machine name or ip> 
cap>!deploy #or any other cap task you have 

आशा है कि यह मदद करता है,

स्कॉट

1

कौन-सा संस्करण सुविधा जोड़ा गया है में सुनिश्चित नहीं हैं, लेकिन टोपी भूमिकाओं में वातावरण चर देखो जो भूमिकाओं को चलाने के लिए निर्धारित करने के लिए होगा तो

$ ROLES=db cap deploy 
2

यदि आप कमांड लाइन से कैपिस्ट्रानो कार्य चलाने के लिए चाहते हैं, लेकिन केवल परिभाषित भूमिकाओं के उप-समूह के लिए, तो आप ROLES पैरामीटर का उपयोग कर सकते हैं।

आदेश नीचे केवल भूमिका was के लिए कार्य category:task कार्यान्वित:,

cap ROLES=was category:task 

ROLES पैरामीटर multivalued है, ताकि आप अधिक भूमिकाओं अल्पविराम से अलग जोड़ सकते हैं:

cap ROLES=was,db category:task 

अधिक जानकारी के लिए , आप invoke प्रलेखन

संबंधित मुद्दे