Capistrano - очистите старые релизы

125

Обычно при использовании capistrano я вручную удаляю старые выпуски из развернутого приложения. Я понимаю, что запускать можно, cap deploy:cleanupно остается 5 релизов. Это по прямому назначению? Есть ли другой способ очистить старые выпуски до одного предыдущего развертывания?

мистифицировать
источник
Всегда полезно сохранить некоторые предыдущие выпуски, а затем, если последнее развертывание содержит большую ошибку, вы можете быстро выполнить откат с помощью capistrano (cap deploy: rollback) к предыдущему выпуску, пока не исправите его.
Damoiser

Ответы:

155

Вы можете использовать эту :keep_releasesпеременную, чтобы переопределить значение по умолчанию 5. Проверьте это .

jcrossley3
источник
2
Возможно, стоит отметить, что даже если команде find + rm не удается удалить некоторые файлы, задача, кажется, молчаливо "завершается" при вызове через afterловушку. Вызов его напрямую показывает ошибки ... Я понял это, когда у меня начинало заканчиваться дисковое пространство.
conny
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

Если вы хотите удалить все выпуски, кроме последних 3, например, вы можете запустить:

cap deploy:cleanup -s keep_releases=3
Джесси Кай
источник
7
Не работает. optionParser::InvalidOption: invalid option: s
Snowman
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_allилиcap staging cleanup_all

борец
источник