Capistrano - wyczyść stare wersje


125

Zwykle podczas korzystania z capistrano idę i ręcznie usuwam stare wersje z wdrożonej aplikacji. Rozumiem, że możesz uruchomić, cap deploy:cleanupale nadal pozostawia 5 wersji. Czy to jest zamierzony cel? Czy istnieje inny sposób na uporządkowanie starych wersji do zaledwie 1 poprzedniego wdrożenia?


Zawsze dobrze jest zachować niektóre poprzednie wersje, a jeśli ostatnie wdrożenie zawiera duży błąd, możesz szybko przywrócić poprzednią wersję za pomocą capistrano (ograniczenie wdrożenia: wycofanie) do poprzedniej wersji, dopóki go nie naprawisz.
damoiser

Odpowiedzi:


155

Możesz użyć :keep_releaseszmiennej, aby zastąpić domyślną wartość 5. Sprawdź to .


2
Warto zauważyć, że nawet jeśli polecenie find + rm nie usunie niektórych plików, po wywołaniu przez afterpodpięcie zadanie po cichu „powiedzie się” . Wywołanie go bezpośrednio pokazuje błędy ... Zrozumiałem to, gdy zaczynało brakować miejsca na dysku.
conny

8
@Josh Zaakceptowałeś tę odpowiedź, ale powinieneś sprawdzić, czy ustawiłeś wywołanie zwrotne dla „deploy: cleanup”, jak powiedziałem poniżej, ponieważ nie działa ono domyślnie.
Diego Plentz

131

Możesz to zrobić automatycznie, ustawiając to w pliku deploy.rb

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

W przeszłości (nie wiem dokładnie, która wersja) to wywołanie zwrotne było domyślne, ale później programista postanowił pozostawić decyzję użytkownikowi. W Capistrano 3 został dodany z powrotem do domyślnego przepływu wdrażania.


1
Dziękuję, Diego. Twoja odpowiedź działa poprawnie w Capistrano v2.14.1.
scarver2


41

Jeśli chcesz usunąć wszystkie wydania oprócz ostatnich 3, na przykład, możesz uruchomić:

cap deploy:cleanup -s keep_releases=3

7
Nie działa. optionParser::InvalidOption: invalid option: s
Snowman

0

Miałem podobny problem. Chciałem zachować 5 wersji dla normalnych wdrożeń, ale w pewnych sytuacjach potrzebowałem, aby móc usunąć wszystkie poprzednie wersje.

Udało mi się to zrobić za pomocą niestandardowego zadania. Utwórz plik lib/capistrano/tasks/cleanup.rakei dodaj następujący kod.

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

Aby uruchomić użyj bundle exec cap staging cleanup_alllubcap staging cleanup_all

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.