我正在使用capistrano进行RAILS部署。我们希望首先部署到一个服务器,并在第一个服务器上完成部署之后,然后我们要在第二个服务器上开始部署。我们不希望延迟重启。我们希望一次完成一个部署。到目前为止,我有这个:
namespace :deploy do
task :sequence do
on roles(:app), in: :sequence do |host|
invoke 'deploy'
end
end
end
问题在于invoke 'deploy'
它为所有应用服务器调用deploy,这些服务器又并行部署。
最后如何为特定主机调用部署任务?
答案 0 :(得分: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 :(得分: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/
考虑到这一点,我可能会写一个运行capistrano N次的脚本(或Makefile),每次都运行一个不同的服务器。