Capistrano - bereinigen Sie alte Releases

125

Wenn ich capistrano verwende, lösche ich normalerweise alte Releases manuell aus einer bereitgestellten Anwendung. Ich verstehe, dass Sie laufen können, cap deploy:cleanupaber das lässt noch 5 Releases. Ist das der beabsichtigte Zweck? Gibt es eine andere Möglichkeit, alte Releases auf nur eine vorherige Bereitstellung zu bereinigen?

Josh
quelle
Es ist immer eine gute Idee, einige frühere Versionen beizubehalten. Wenn Ihre letzte Bereitstellung einen großen Fehler enthält, können Sie mit capistrano (cap deploy: rollback) schnell auf die vorherige Version zurücksetzen, bis Sie das Problem beheben.
Damoiser

Antworten:

155

Sie können die :keep_releasesVariable verwenden, um den Standardwert von 5 zu überschreiben. Überprüfen Sie dies .

jcrossley3
quelle
2
Es kann erwähnenswert sein, dass selbst wenn der Befehl find + rm einige Dateien nicht entfernt, die Aufgabe beim Aufrufen über den afterHook stillschweigend "erfolgreich" zu sein scheint . Wenn ich es direkt aufrufe, werden die Fehler angezeigt ... Ich habe dies festgestellt, als mir der Speicherplatz ausgegangen ist.
Conny
8
@Josh Sie haben diese Antwort akzeptiert, sollten jedoch überprüfen, ob Sie den Rückruf für "deploy: cleanup" wie unten angegeben festgelegt haben, da er nicht standardmäßig ausgeführt wird.
Diego Plentz
131

Sie können dies automatisch tun, indem Sie dies in Ihrer deploy.rb festlegen

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

In der Vergangenheit (ich weiß nicht genau, welche Version) war dieser Rückruf die Standardeinstellung, aber später entschied sich der Entwickler, ihn dem Benutzer zu überlassen, um zu entscheiden. In Capistrano 3 wurde es wieder zum Standardbereitstellungsablauf hinzugefügt.

Diego Plentz
quelle
1
Danke, Diego. Ihre Antwort funktioniert in Capistrano v2.14.1 korrekt.
Scarver2
41

Wenn Sie beispielsweise alle Releases außer den letzten 3 löschen möchten, können Sie Folgendes ausführen:

cap deploy:cleanup -s keep_releases=3
Jesse Cai
quelle
7
Funktioniert nicht optionParser::InvalidOption: invalid option: s
Schneemann
0

Ich hatte ein ähnliches Problem. Ich wollte die 5 Releases für normale Bereitstellungen behalten, musste sie jedoch in bestimmten Situationen entfernen, um alle vorherigen Releases entfernen zu können.

Ich konnte dies mit einer benutzerdefinierten Aufgabe tun. Erstellen Sie eine Datei lib/capistrano/tasks/cleanup.rakeund fügen Sie den folgenden Code hinzu.

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

Verwenden Sie bundle exec cap staging cleanup_allodercap staging cleanup_all

Greifer
quelle