【问题标题】:Capistrano3 - Delete failed release on deploy:failedCapistrano3 - 在部署时删除失败的发布:失败
【发布时间】:2016-11-03 21:24:28
【问题描述】:

我正在使用 Capistrano 3。如何在 deploy:failed 上删除失败的版本而不编写自己的任务?关键是失败的版本保留在版本目录中,并且我可以通过键入 cap deploy:rollback
意外地回滚到损坏的版本 升级版: 目前我正在使用此任务,但仍在寻找更好的解决方案。

namespace :deploy do

  desc 'Delete failed release'  
  task :rm_failed do  
    on roles(:all) do  
      execute(:rm, "-rf #{release_path}")
    end
  end

end

after 'deploy:failed', 'deploy:rm_failed'

【问题讨论】:

  • 小心这个解决方案。如果 deploy:cleanup 失败,这个任务将被调用并且你的版本将被删除...在它被 deploy:symlink:release 发布到生产环境之后!

标签: capistrano


【解决方案1】:

我对 Capistrano 的有限经验表明,没有内置机制可以执行您想要的操作。编写使用 deploy:failed 触发的任务是处理这种情况的正确方法,因为它可以是特定于应用程序的。

一个更好的解决方案,解决了 deploy:clean 在 deploy:symlink:release 之后失败的可能性 --

namespace :deploy do

    desc 'Delete failed release'
    task :rm_failed do
        on roles(:web) do
            if test "[ -d #{current_path} ]"
                current_release = capture(:readlink, current_path).to_s
                if current_release != release_path.to_s
                    execute :rm, "-rf #{release_path}"
                end
            end
        end
    end

end

after 'deploy:failed', 'deploy:rm_failed'

Capistrano page on rollbacks 对处理回滚和故障进行了更广泛的讨论。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多