Capistrano - 清理旧版本

Posted

技术标签:

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

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

【问题讨论】:

保留一些以前的版本是个好主意,那么如果您上次部署包含一个大错误,您可以使用 capistrano (cap deploy:rollback) 快速回滚到以前的版本,直到您修复它。 【参考方案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 中,它被添加回默认部署流程。

【讨论】:

谢谢你,迭戈。您的答案在 Capistrano v2.14.1 中正确运行。 看起来像Capistrano 3 calls deploy:cleanup as part of the deploy flow。【参考方案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

【讨论】:

以上是关于Capistrano - 清理旧版本的主要内容,如果未能解决你的问题,请参考以下文章

如何清理 Firebase 托管中的旧部署版本?

Xcode磁盘空间大清理

清理XCode无用的文件(转)

MAC OSX Xcode硬盘清理

MySQL 5.7.10 自动备份自动清理旧备份集

linux中清理旧内核