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?


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 .


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.


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

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.