【发布时间】:2014-07-25 19:12:42
【问题描述】:
我正在使用 Capistrano 2.15.5 将 Java Web 应用程序部署到 Tomcat 应用程序服务器。目前,我们绑定并致力于此版本的 Capistrano,我们无法升级到 v3。部署任务将调用其他任务以在角色中的所有服务器上并行执行。这按预期工作,并且已经运行了一段时间。
现在我们需要实现一个滚动部署,当任务一次在一台服务器上执行时。因此,根据下面的代码,我们将首先在prdapp01 上执行shutdown_tomcat, download_bits, deploy_bits, start_tomcat,然后再执行prdapp02 等等......这样在任何给定时间,集群中只有一个服务器处于离线状态,从而最大限度地延长我们的正常运行时间。
使用 Capistrano 实施此滚动部署策略的最佳方式是什么?
这是我的 Capistrano 脚本的配对版本目前的样子:
task :production do
role :app, "deployuser@prdapp01", "deployuser@prdapp02", "deployuser@prdapp03"
# ...
end
task :deploy do
shutdown_tomcat
download_bits
deploy_bits
start_tomcat
end
task :shutdown_tomcat, :roles => :app do
run "sudo /sbin/service tomcat stop || exit 1;"
end
task :download_bits, :roles => :app do
run <<-EOS
[ -f /tmp/app_download ] && rm -rf /tmp/app_download;
mkdir -p /tmp/app_download;
cd /tmp/app_download;
wget -q https://internal.server/path/to/application.war || exit 1;
EOS
end
task :deploy_bits, :roles => :app do
run <<-EOS
cd /tmp/app_download;
unzip -q -o /tmp/app_download/application.war -d /usr/local/tomcat/webapps/ || exit 1;
exit 0;
EOS
end
task :start_tomcat, :roles => :app do
run "sudo /sbin/service tomcat start || exit 1;"
end
【问题讨论】:
标签: java tomcat deployment capistrano