在RAILS部署中,我使用了capistrano。我们希望先部署到一台服务器,然后在第一台服务器上完成部署之后,然后在第二台服务器上开始部署。我们不希望拖延地重新开始。我们希望一次有一个完整的部署。到目前为止我有这样的想法:
namespace :deploy do
task :sequence do
on roles(:app), in: :sequence do |host|
invoke 'deploy'
end
end
end问题在于,invoke 'deploy'为所有应用服务器调用deploy,这些应用服务器依次并行部署。
最后,如何为特定主机调用部署任务?
发布于 2017-07-21 15:59:04
以下内容将帮助您在顺序模式下运行deploy任务:
task :my_task, roles: :web do
find_servers_for_task(current_task).each do |server|
run "YOUR_COMMAND", hosts: server.host
end
end发布于 2017-07-22 13:00:11
如果我有这个要求,我可能会写它。您可以使用--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时间。
https://stackoverflow.com/questions/45235809
复制相似问题