Capistrano - eski sürümleri temizleyin


125

Genellikle capistrano kullanırken gidip eski sürümleri konuşlandırılmış bir uygulamadan manuel olarak silerim. Koşabileceğinizi anlıyorum cap deploy:cleanupama hala 5 sürüm kalıyor. Bu amaçlanan amaç mı? Eski sürümleri önceki 1 dağıtıma temizlemenin başka bir yolu var mı?


Önceki sürümlerin bazılarını saklamak her zaman iyi bir fikirdir, o zaman en son konuşlandırmanızda büyük bir hata varsa, onu düzeltene kadar capistrano (cap deploy: rollback) ile önceki sürüme hızlıca geri dönebilirsiniz.
damoiser

Yanıtlar:


155

Sen kullanabilirsiniz :keep_releases5'in varsayılan kontrol geçersiz kılmak için değişken bu dışarı.


2
Find + rm komutu bazı dosyaları kaldırmada başarısız olsa bile, afterkanca aracılığıyla çağrıldığında görevin sessizce "başarılı" gibi göründüğünü belirtmekte fayda var . Doğrudan çağırmak hataları gösterir ... Bunu disk alanım tükenmeye başladığımda fark ettim.
conny

8
@Josh Bu yanıtı kabul ettiniz, ancak varsayılan olarak çalışmadığı için aşağıda söylediğim gibi "deploy: cleanup" için geri aramayı ayarlayıp ayarlamadığınızı kontrol etmelisiniz.
Diego Plentz

131

Bunu deploy.rb dosyanızda ayarlayarak otomatik olarak yapabilirsiniz.

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

Geçmişte (tam olarak hangi sürümü bilmiyorum) bu geri arama varsayılandı, ancak daha sonra geliştirici karar vermesi için bunu kullanıcıya bırakmaya karar verdi. Capistrano 3'te, varsayılan dağıtım akışına geri eklendi.


1
Teşekkür ederim Diego. Cevabınız Capistrano v2.14.1'de doğru çalışıyor.
scarver2


41

Örneğin, son 3 dışındaki tüm sürümleri silmek isterseniz çalıştırabilirsiniz:

cap deploy:cleanup -s keep_releases=3

7
Çalışmıyor. optionParser::InvalidOption: invalid option: s
Kardan Adam

0

Ben de benzer bir sorun yaşadım. Normal dağıtımlar için 5 sürümü saklamak istedim, ancak belirli durumlarda önceki tüm sürümleri kaldırabilmek için ihtiyacım vardı.

Bunu özel bir görevle yapabildim. Bir dosya oluşturun lib/capistrano/tasks/cleanup.rakeve aşağıdaki kodu ekleyin.

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

Çalıştırmak için bundle exec cap staging cleanup_allveyacap staging cleanup_all

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.