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?

Josh
źródło
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 .

jcrossley3
źródło
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.

Diego Plentz
źródło
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
jesse cai
źródło
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

grappler
źródło