Capistrano - очищення старих релізів


125

Зазвичай, використовуючи capistrano, я перейду та видалю вручну старі версії із розгорнутої програми. Я розумію, що ви можете запустити, cap deploy:cleanupале це все ще залишає 5 версій. Це за призначенням? Чи є інший спосіб очищення старих версій лише до 1 попереднього розгортання?


завжди корисно зберегти деякі попередні випуски, тоді, якщо останній разгортання містить велику помилку, ви можете швидко відкатати з capistrano (cap розгортання: відкат) до попереднього випуску, поки не виправите це.
дамвайзер

Відповіді:


155

Ви можете використовувати :keep_releasesзмінну, щоб змінити значення за замовчуванням 5. Перевірте це .


2
Можливо, варто відзначити, що навіть якщо командою find + rm не вдасться видалити деякі файли, завдання, здається, мовчки "успішно", коли викликається через afterгачок. Зателефонувавши безпосередньо, видно помилки ... Я зрозумів це, коли почав вичерпати місце на диску.
conny

8
@Josh Ви прийняли цю відповідь, але слід перевірити, чи встановлено зворотній дзвінок для "розгорнути: очищення", як я вже говорив нижче, оскільки він не працює за замовчуванням.
Дієго Пленц

131

Ви можете зробити це автоматично, встановивши це у свою адресу.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
Сніговик

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.