Capistrano - Nettoyer les anciennes versions

125

Habituellement, lors de l'utilisation de capistrano, je vais supprimer manuellement les anciennes versions d'une application déployée. Je comprends que vous pouvez exécuter cap deploy:cleanupmais cela laisse encore 5 versions. Est-ce son objectif? Existe-t-il un autre moyen de nettoyer les anciennes versions pour un seul déploiement précédent?

Josh
la source
c'est toujours une bonne idée de conserver certaines versions précédentes, puis si votre dernier déploiement contient une grosse erreur, vous pouvez rapidement revenir en arrière avec capistrano (cap deploy: rollback) vers la version précédente jusqu'à ce que vous la corrigiez.
damoiser

Réponses:

155

Vous pouvez utiliser la :keep_releasesvariable pour remplacer la valeur par défaut de 5. Vérifiez ceci .

jcrossley3
la source
2
Il peut être intéressant de noter que même si la commande find + rm ne parvient pas à supprimer certains fichiers, la tâche semble "réussir" silencieusement lorsqu'elle est appelée via le afterhook. L'appeler montre directement les erreurs ... J'ai réalisé cela quand je commençais à manquer d'espace disque.
conny le
8
@Josh Vous avez accepté cette réponse, mais vous devriez vérifier si vous avez défini le rappel pour "deploy: cleanup" comme je l'ai dit ci-dessous, car il ne fonctionne pas par défaut.
Diego Plentz
131

Vous pouvez le faire automatiquement en définissant ceci dans votre deploy.rb

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

Dans le passé (je ne sais pas exactement quelle version), ce rappel était la valeur par défaut, mais plus tard, le développeur a décidé de laisser à l'utilisateur le soin de décider. Dans capistrano 3, il a été ajouté au flux de déploiement par défaut.

Diego Plentz
la source
1
Merci Diego. Votre réponse fonctionne correctement dans Capistrano v2.14.1.
scarver2
41

Si vous souhaitez supprimer toutes les versions sauf les 3 dernières par exemple, vous pouvez exécuter:

cap deploy:cleanup -s keep_releases=3
jesse cai
la source
7
Ça ne marche pas. optionParser::InvalidOption: invalid option: s
Snowman
0

J'avais un problème similaire. Je voulais conserver les 5 versions pour les déploiements normaux mais nécessaire dans certaines situations pour pouvoir supprimer toutes les versions précédentes.

J'ai pu le faire avec une tâche personnalisée. Créez un fichier lib/capistrano/tasks/cleanup.rakeet ajoutez le code suivant.

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

Pour exécuter, utilisez bundle exec cap staging cleanup_alloucap staging cleanup_all

grappler
la source