Capistrano-清理旧版本


125

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


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

Answers:


155

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


2
可能值得注意的是,即使find + rm命令无法删除某些文件,通过after挂钩调用该任务时,该任务似乎也默默地“成功” 。调用它会直接显示错误...当我开始用尽磁盘空间时,我意识到了这一点。
康妮

8
@Josh您接受了此答案,但是您应该按照下面的说明检查是否已为“ deploy:cleanup”设置了回调,因为默认情况下该回调未运行。
迭戈·普伦茨

131

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

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

在过去(我不知道确切的版本),此回调是默认的,但是后来开发人员决定将其留给用户决定。在capistrano 3中,它已添加回默认的部署流程中。


1
谢谢迭戈。您的答案在Capistrano v2.14.1中可以正常工作。
scarver2


41

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

cap deploy:cleanup -s keep_releases=3

7
不起作用 optionParser::InvalidOption: invalid option: s
雪人

0

我有一个类似的问题。我想保留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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.