0

我正在爲我們的RAILS部署使用capistrano。我們首先要部署到一臺服務器,並且在第一臺服務器上部署完成後,我們希望在第二臺服務器上開始部署。我們不希望延遲順序重新啓動。我們希望一次完成一次完整的部署。到目前爲止,我有這樣的:Capistrano一次部署一臺服務器

namespace :deploy do 
    task :sequence do 
    on roles(:app), in: :sequence do |host| 
     invoke 'deploy' 
    end 
    end 
end 

問題是與invoke 'deploy' 它要求部署所有輪流部署並行應用程序服務器。

最後如何爲特定主機調用部署任務?

回答

1

以下應該可以幫助你在連續模式下運行deploy任務:

task :my_task, roles: :web do 
    find_servers_for_task(current_task).each do |server| 
    run "YOUR_COMMAND", hosts: server.host 
    end 
end 
1

如果我有這樣的要求,我可能腳本它。您可以運行帶有--hosts參數的Capistrano來定義您在階段文件(config/deploy/dev|stage|prod|somethingelse.rb)中描述的那些服務器實際上是要針對該命令運行的。這可以採取兩種形式。假設我有三臺服務器,test1,test2和prod1。我可以使用列表運行它,例如cap prod --hosts=test1,test2 deploy,只有test1和test2纔會收到部署。您也可以使用正則表達式來實現相同的功能,例如cap prod --hosts=^test deploy

這是記錄在這裏:http://capistranorb.com/documentation/advanced-features/host-filtering/

考慮到這一點,我可能會寫一個腳本(或Makefile文件),它每次運行Capistrano的N次,對於不同的服務器。

相關問題