Capistrano - limpe versões antigas

125

Normalmente, ao usar o capistrano, excluirei manualmente as versões antigas de um aplicativo implantado. Eu entendo que você pode executar, cap deploy:cleanupmas isso ainda deixa 5 versões. É este o seu propósito? Existe outra maneira de limpar as versões antigas para apenas 1 implantação anterior?

Josh
fonte
é sempre uma boa idéia manter algumas versões anteriores; se a última implantação contiver um grande erro, você poderá reverter rapidamente o capistrano (cap deploy: rollback) para a versão anterior até corrigi-la.
Damoiser

Respostas:

155

Você pode usar a :keep_releasesvariável para substituir o padrão de 5. Verifique isso .

jcrossley3
fonte
2
Pode ser interessante notar que, mesmo que o comando find + rm falhe na remoção de alguns arquivos, a tarefa parece silenciosamente "bem-sucedida" quando chamada pelo aftergancho. Chamar diretamente mostra os erros ... Percebi isso quando estava começando a ficar sem espaço em disco.
conny
8
@ Josh Você aceitou esta resposta, mas deve verificar se configurou o retorno de chamada para "deploy: cleanup", como eu disse abaixo, pois ele não é executado por padrão.
Diego Plentz
131

Você pode fazer isso automaticamente configurando isso em seu deploy.rb

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

No passado (não sei exatamente qual versão), esse retorno de chamada era o padrão, mas mais tarde o desenvolvedor decidiu deixar o usuário decidir. No capistrano 3, ele foi adicionado novamente ao fluxo de implementação padrão.

Diego Plentz
fonte
1
Obrigado Diego. Sua resposta funciona corretamente no Capistrano v2.14.1.
precisa saber é o seguinte
41

Se você deseja excluir todos os releases, exceto os três últimos, por exemplo, você pode executar:

cap deploy:cleanup -s keep_releases=3
Jessé cai
fonte
7
Não funciona optionParser::InvalidOption: invalid option: s
Snowman
0

Eu tive um problema parecido. Eu queria manter os 5 lançamentos para implantações normais, mas precisava que determinadas situações pudessem remover todos os lançamentos anteriores.

Consegui fazer isso com uma tarefa personalizada. Crie um arquivo lib/capistrano/tasks/cleanup.rakee adicione o seguinte código.

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

Para executar use bundle exec cap staging cleanup_alloucap staging cleanup_all

grappler
fonte