【发布时间】:2015-04-28 08:47:27
【问题描述】:
我们正在开发一个允许我们使用 capistrano 一次部署多个项目的系统。我们有 3 个系统(前台、计费、应用程序),它们都有一个单独的代码库,并分多个阶段部署在不同的服务器上。
使用 capistrano_multiconfig 创建一个具有多种配置的 capistrano 存储库就像一个魅力。我可以单独运行每个命令,它们都可以在正确的阶段很好地部署到正确的服务器。
现在我想添加一个自定义任务,使用单个命令一次部署所有配置的项目。我已经粘贴了下面的命令代码。
set :projects, ['front', 'billing', 'app']
namespace :deploy do
desc 'Deploy all'
task :all do
set :env, ask('To what environment do you want to deploy?', 'staging');
run_locally do
fetch(:projects).each { |project|
info "Now deploying #{project} to #{fetch(:env)}"
invoke "#{project}:#{fetch(:env)}"
invoke "deploy"
}
end
end
end
问题是上面的代码只部署了第一个项目,info命令对.each循环的所有迭代执行,但部署命令的调用只对第一个项目运行,之后以下两个调用调用什么都不做。
有人有想法吗?
【问题讨论】:
-
三个应用程序是否都部署为一个整体?如果没有,用户可能会看到一些错误,因为其中一部分已启动并且与其余部分不兼容。有人知道解决方案吗?