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?


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 .


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.


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

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.