我的团队正在使用越来越多的capistrano。 我们为不同的环境(升级和生产)进行了很多斗争,我们正在寻找一种方法来阻止某人使用capistrano进行部署,因为部署已经在运行(几天前发生在我们身上)。
capistrano v2中是否有这样的功能插件,还是应该根据锁/标志文件详细说明?
答案 0 :(得分:1)
Capistrano有各种各样的钩子,你可以用它们在capistrano配方的执行路径的确定阶段注入你的代码。我假设你想要防止第一台机器已经运行时在SAME机器上进行另一次部署。如果他们在不同的机器上,我希望你有任何问题!
如上所述,一个简单的方法是锁定/标记文件:
您可以定义前后钩子,如下所示:
before "deploy:update_code", "any_namespace:acquire_lock"
after "deploy:create_symlink", "any_namespace:release_lock"
并且您应该在deploy.rb本身中定义这两个任务:
namespace :any_namespace do
desc "attempts to acquire lock if available or exits"
task :acquire_lock do
present = capture("test -f /path/to/some/fixed/dir/deploy_lock && echo \"yes\" || echo \"no\" ")
if present == "yes"
#means someone is already deploying on the same machine
puts "someone is already deploying on the same machine."
exit
else
#its safe to deploy, lets acquire the lock
run 'touch /path/to/some/fixed/dir/deploy_lock'
puts "Lock acquired successfully"
end
end
desc "releases the acquire lock so others can deploy"
task :release_lock do
run("rm /path/to/some/fixed/dir/deploy_lock")
puts "Released Lock successfully"
end
end
请注意,capistrano中有各种钩子,可能更紧凑,更有用。例如:启动和完成挂钩。我不确定它们是否完美无缺,但您可以检查它们并根据需要使用合适的钩子。
希望有所帮助:)