2011-06-29 68 views
8

我的項目有一個多步驟的管道,包括爬行,NLP等一些步驟,但我只是將它們稱爲Step1,Step2等。此外,我希望能夠部署到不同的環境(dev,prod等)。只爲某些角色運行Capistrano任務

我想我將使用Capistrano的多級組件來部署到不同的環境(例如cap dev deploy vs cap prod deploy)。

對於每個管道步驟使用角色似乎也很直觀。但是,每個步驟都獨立於其餘管道運行,因此每個步驟都可以獨立於其他步驟重新啓動/部署。似乎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」 結束 ' 作爲部署的一部分,我想上運行我所有機器,如果我在我的管道中部署所有步驟。但是如果我只部署管道的Step2,我只想清除所有具有Step2角色的機器上的日誌。 我遇到的角色問題在於他們擅長指定要在哪些計算機上運行任務,但您似乎無法指定是否實際運行它們或不運行特定部署。 – 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

如果要從命令行運行capistrano任務,但僅限定義角色的子集,則可以使用ROLES參數。

下面的命令執行任務category:task僅限於角色was

cap ROLES=was category:task 

ROLES參數是多值,這樣你就可以添加用逗號分隔的多個角色:

cap ROLES=was,db category:task 

有關詳細信息,你可以參考invoke文檔

相關問題