【问题标题】:Capistrano - clean up old releasesCapistrano - 清理旧版本
【发布时间】:2011-01-08 11:33:09
【问题描述】:

通常在使用 capistrano 时,我会从已部署的应用程序中手动删除旧版本。我知道您可以运行cap deploy:cleanup,但仍然有 5 个版本。这是它的预期目的吗?是否有另一种方法可以将旧版本清理为仅 1 个以前的部署?

【问题讨论】:

  • 保留一些以前的版本是个好主意,那么如果您上次部署包含一个大错误,您可以使用 capistrano (cap deploy:rollback) 快速回滚到以前的版本,直到您修复它。

标签: capistrano


【解决方案1】:

您可以使用:keep_releases 变量来覆盖默认值5。检查this

【讨论】:

  • 可能值得注意的是,即使 find+rm 命令无法删除某些文件,当通过 after 挂钩调用时,该任务似乎也会默默地“成功”。直接调用它会显示错误......当我开始用完磁盘空间时我意识到了这一点。
  • @Josh 你接受了这个答案,但你应该检查你是否已经为“deploy:cleanup”设置了回调,如下所述,因为默认情况下它不会运行。
【解决方案2】:

您可以通过在 deploy.rb 中设置来自动执行此操作

set :keep_releases, 1
after "deploy:update", "deploy:cleanup" 

过去(我不知道具体是哪个版本)这个回调是默认的,但后来开发者决定让用户来决定。在 capistrano 3 中,它被添加回默认部署流程。

【讨论】:

【解决方案3】:

如果您想删除除最后 3 个以外的所有版本,例如,您可以运行:

cap deploy:cleanup -s keep_releases=3

【讨论】:

  • 不起作用。 optionParser::InvalidOption: invalid option: s
【解决方案4】:

我遇到了类似的问题。我想保留 5 个版本以用于正常部署,但在某些情况下需要能够删除所有以前的版本。

我可以通过自定义任务做到这一点。创建文件lib/capistrano/tasks/cleanup.rake并添加以下代码。

desc "Remove all but the last release"
task :cleanup_all do
    set :keep_releases, 1
    invoke "deploy:cleanup"
end

要运行使用bundle exec cap staging cleanup_allcap staging cleanup_all

【讨论】:

    猜你喜欢
    • 2013-01-07
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多