كيفية نشر إلى ملقم معين واحد باستخدام كابيسترانو
-
07-07-2019 - |
سؤال
ولدي النظام في إنتاج يحتوي على العديد من الخوادم في عدة أدوار. وأود أن اختبار ملقم التطبيق الجديد من خلال نشر هذا الخادم معين، دون الحاجة إلى إعادة نشر إلى كل ملقم في الإنتاج. هل هناك وسيلة لطرح كابيسترانو لنشر إلى خادم معين؟ ومن الناحية المثالية أود أن تكون قادرة على تشغيل شيء من هذا القبيل
cap SERVER=app2.example.com ROLE=app production deploy
وإذا أردت فقط لنشر لapp2.example.com.
وشكرا!
[التحديث] حاولت الحل المقترح من قبل وولونغ عن طريق تنفيذ:
cap HOSTS=app2.server.hostname ROLE=app qa deploy
ولكن كابيسترانو يبدو أن محاولة تنفيذ مهام أدوار أخرى على ذلك الملقم بالإضافة إلى المهام التطبيق. ربما كنت بحاجة إلى تحديث نسختي من قبعة (أنا على التوالي V2.2.0)؟
المحلول
وانتهى بي الأمر نشر سؤال على لائحة المستخدمين كابيسترانو هنا ، وحصلت على الرد التالي من خميس (تحرير قليلا من قبلي هنا لوضوح):
وحاول متغير معادل البيئة:
cap HOSTS=app2.example.com production deploy
لاحظ أن القيام بذلك سوف علاج APP2 كما يجري في كل دور، وليس فقط أيهما دور (ق) يحدث أن أعلن في.
إذا ما كنت أريده هو أن تفعل نشر العادية، ولكن تعمل فقط على APP2، و فقط كما هو أعلن APP2 في ملف وصفتك، يمكنك استخدام HOSTFILTER المتغير بدلا من ذلك:
cap HOSTFILTER=app2.example.com production deploy
[...]
وجرب هذا المثال الملموس. لنفترض أن لديك يحدد النصي ثلاثة خوادم، A، B، C. ووأنها تحدد مهمة، "فو"، أن (افتراضيا) يريد أن تعمل على ألف وباء، ولكن ليس C. مثل هذا:
role :app, "A", "B"
role :web, "C"
task :foo, :roles => :app do
run "echo hello"
end
والآن، إذا كنت تفعل cap foo
، فستعمل الأمر صدى على كل من A و B.
إذا كنت لا cap HOSTS=C foo
، فستعمل الأمر صدى على C،
بغض النظر عن: دور المعلمة لهذه المهمة
إذا كنت لا cap HOSTFILTER=C foo
، وسوف يتم تشغيل الأمر صدى في
قبل كل شيء، لأن تقاطع (A B) و (C) هو مجموعة فارغة. (هناك
لا توجد المضيفين في قائمة المضيف فو التي تطابق C).
إذا كنت لا cap HOSTFILTER=A foo
، فستعمل الأمر صدى على فقط
A، لأن (A B) تتقاطع مع (A) هو (A).
وأخيرا، إذا كنت تفعل cap HOSTFILTER=A,B,C foo
، فستعمل صدى
أمر على ألف وباء (ولكن ليس C)، لأن (A B) تتقاطع مع (A B C)
هو (A B).
لتلخيص: معادل يتجاوز تماما إعلان المضيفين أو الأدوار من هذه المهمة، وقوات كل شيء لخوض الانتخابات ضد المضيف المحدد (ق). وHOSTFILTER، من ناحية أخرى، لمجرد تصفية المضيفين القائمة ضد قائمة معينة، واختيار فقط تلك الملقمات التي هي بالفعل في خادم قائمة المهام.
نصائح أخرى
ويجب أن تعمل من خارج منطقة الجزاء التالية:
cap HOSTS=app2.example.com ROLE=app deploy
إذا كنت ترغب في نشر ل> الخادم 1 مع نفس الدور:
cap HOSTS=app2.example.com,app3.example.com,app4.example.com ROLE=app deploy
ولدي مشكلة مماثلة وحاول ما يلي: يعمل:
cap production ROLES=web HOSTS=machine1 stats
ويجب أن تكون قادرة على القيام بشيء من هذا القبيل في deploy.rb:
task :production do
if ENV['SERVER'] && ENV['ROLE']
role ENV['ROLE'], ENV['SERVER']
else
# your full config
end
end
ويمكنك أيضا specifiy المضيفين على مستوى المهمة المعلمة بهذه الطريقة:
task :ship_artifacts, :hosts => ENV['DEST_HOST'] do
end