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次,对于不同的服务器。

相关问题