Capistrano 一次部署一台服务器



我正在使用capistrano进行RAILS部署。我们希望首先部署到一台服务器,在第一台服务器上完成部署后,我们希望在第二台服务器上开始部署。我们不希望延迟按顺序重新启动。我们希望一次完成一个部署。到目前为止,我有这个:

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

问题出在invoke 'deploy'它对所有应用服务器调用 deploy,而这些服务器又并行部署。

最后如何为特定主机调用部署任务?

以下内容应该可以帮助您以顺序模式运行deploy任务:

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

如果我有这个要求,我可能会编写脚本。您可以使用--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 次。

相关内容

最新更新