Capistrano: ripulisce le vecchie versioni


125

Di solito quando uso capistrano, andrò ed eliminerò manualmente le vecchie versioni da un'applicazione distribuita. Capisco che puoi eseguire cap deploy:cleanupma che lascia ancora 5 versioni. È questo lo scopo previsto? C'è un altro modo per ripulire le vecchie versioni in una sola distribuzione precedente?


è sempre una buona idea mantenere alcune versioni precedenti, quindi se l'ultima distribuzione contiene un grosso errore, è possibile eseguire il rollback rapido con capistrano (cap deploy: rollback) alla versione precedente fino a quando non viene risolto.
Damoiser,

Risposte:


155

È possibile utilizzare la :keep_releasesvariabile per ignorare l'impostazione predefinita di 5. Controllare questo fuori.


2
Vale la pena notare che anche se il comando find + rm non riesce a rimuovere alcuni file, l'attività sembra "riuscire" in silenzio quando viene chiamata tramite l' afterhook. Chiamarlo mostra direttamente gli errori ... L'ho capito quando stavo iniziando a corto di spazio su disco.
Conny,

8
@Josh Hai accettato questa risposta, ma dovresti verificare se hai impostato il callback per "deploy: cleanup" come ho detto sotto, poiché non viene eseguito per impostazione predefinita.
Diego Plentz,

131

Puoi farlo automaticamente impostandolo nel tuo deploy.rb

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

In passato (non so esattamente quale versione) questo callback era l'impostazione predefinita, ma in seguito lo sviluppatore ha deciso di lasciare all'utente la decisione. In capistrano 3 è stato aggiunto di nuovo al flusso di distribuzione predefinito.


1
Grazie Diego. La tua risposta funziona correttamente in Capistrano v2.14.1.
scarver2


41

Se si desidera eliminare tutte le versioni tranne le ultime 3, ad esempio, è possibile eseguire:

cap deploy:cleanup -s keep_releases=3

7
Non funziona optionParser::InvalidOption: invalid option: s
Pupazzo di neve

0

Ho avuto un problema simile. Volevo conservare le 5 versioni per le distribuzioni normali, ma avevo bisogno che certe situazioni potessero rimuovere tutte le versioni precedenti.

Sono stato in grado di farlo con un'attività personalizzata. Crea un file lib/capistrano/tasks/cleanup.rakee aggiungi il seguente codice.

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

Per eseguire utilizzare bundle exec cap staging cleanup_allocap staging cleanup_all

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.