Capistrano - limpia versiones antiguas

125

Por lo general, cuando uso Capistrano, iré y eliminaré manualmente versiones antiguas de una aplicación implementada. Entiendo que puedes correr cap deploy:cleanuppero eso todavía deja 5 lanzamientos. ¿Es este el propósito previsto? ¿Hay alguna otra forma de limpiar versiones anteriores en solo 1 implementación anterior?

Josh
fuente
siempre es una buena idea mantener algunas versiones anteriores, luego, si la última implementación contiene un gran error, puede retroceder rápidamente con capistrano (implementación de cap: retroceso) a la versión anterior hasta que lo arregle.
Damoiser

Respuestas:

155

Puede usar la :keep_releasesvariable para anular el valor predeterminado de 5. Compruebe esto .

jcrossley3
fuente
2
Vale la pena señalar que incluso si el comando find + rm no puede eliminar algunos archivos, la tarea parece "tener éxito" en silencio cuando se llama a través del aftergancho. Llamarlo directamente muestra los errores ... Me di cuenta de esto cuando comenzaba a quedarme sin espacio en disco.
conny
8
@ Josh Aceptó esta respuesta, pero debe verificar si ha configurado la devolución de llamada para "desplegar: limpieza" como dije a continuación, ya que no se ejecuta de manera predeterminada.
Diego Plentz
131

Puede hacer esto automáticamente configurando esto en su deploy.rb

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

En el pasado (no sé exactamente qué versión) esta devolución de llamada era la predeterminada, pero más tarde el desarrollador decidió dejar que el usuario decidiera. En capistrano 3 se volvió a agregar al flujo de implementación predeterminado.

Diego Plentz
fuente
1
Gracias diego Su respuesta funciona correctamente en Capistrano v2.14.1.
scarver2
41

Si desea eliminar todas las versiones, excepto las últimas 3, por ejemplo, puede ejecutar:

cap deploy:cleanup -s keep_releases=3
jesse cai
fuente
77
No funciona optionParser::InvalidOption: invalid option: s
Muñeco de nieve
0

Tuve un problema similar. Quería mantener las 5 versiones para implementaciones normales, pero necesitaba para ciertas situaciones poder eliminar todas las versiones anteriores.

Pude hacer esto con una tarea personalizada. Cree un archivo lib/capistrano/tasks/cleanup.rakey agregue el siguiente código.

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

Para ejecutar use bundle exec cap staging cleanup_allocap staging cleanup_all

luchador
fuente