Capistrano - bersihkan rilis lama

125

Biasanya ketika menggunakan capistrano, saya akan pergi dan secara manual menghapus rilis lama dari aplikasi yang digunakan. Saya mengerti bahwa Anda dapat menjalankan cap deploy:cleanuptetapi masih menyisakan 5 rilis. Apakah ini tujuan yang dimaksudkan? Apakah ada cara lain untuk membersihkan rilis lama menjadi hanya 1 penyebaran sebelumnya?

Josh
sumber
itu adalah ide yang baik untuk menyimpan beberapa rilis sebelumnya, maka jika Anda menggunakan penyebaran terakhir kesalahan besar Anda dapat kembalikan cepat dengan capistrano (cap deploy: rollback) ke rilis sebelumnya sampai Anda memperbaikinya.
damoiser

Jawaban:

155

Anda dapat menggunakan :keep_releasesvariabel untuk mengganti default 5. Lihat ini .

jcrossley3
sumber
2
Mungkin perlu dicatat bahwa bahkan jika perintah find + rm gagal menghapus beberapa file, tugas itu tampaknya "berhasil" secara diam-diam ketika dipanggil melalui afterhook. Memanggilnya langsung menunjukkan kesalahan ... Saya menyadari ini ketika saya mulai kehabisan ruang disk.
conny
8
@Josh Anda menerima jawaban ini, tetapi Anda harus memeriksa apakah Anda telah mengatur panggilan balik untuk "deploy: cleanup" seperti yang saya katakan di bawah, karena tidak berjalan secara default.
Diego Plentz
131

Anda bisa melakukan ini secara otomatis dengan mengatur ini di deploy.rb Anda

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

Di masa lalu (saya tidak tahu versi mana) callback ini adalah default, tetapi kemudian pengembang memutuskan untuk menyerahkannya kepada pengguna untuk memutuskan. Dalam capistrano 3 ditambahkan kembali ke aliran penyebaran default.

Diego Plentz
sumber
1
Terima kasih, Diego. Jawaban Anda berfungsi dengan benar di Capistrano v2.14.1.
scarver2
41

Jika Anda ingin menghapus semua rilis kecuali 3 terakhir misalnya Anda dapat menjalankan:

cap deploy:cleanup -s keep_releases=3
jesse cai
sumber
7
Tidak bekerja optionParser::InvalidOption: invalid option: s
Snowman
0

Saya punya masalah serupa. Saya ingin mempertahankan 5 rilis untuk penyebaran normal tetapi diperlukan untuk situasi tertentu untuk dapat menghapus semua rilis sebelumnya.

Saya dapat melakukan ini dengan tugas khusus. Buat file lib/capistrano/tasks/cleanup.rakedan tambahkan kode berikut.

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

Untuk menjalankan gunakan bundle exec cap staging cleanup_allataucap staging cleanup_all

penggenggam
sumber