Capistrano - dọn sạch các bản phát hành cũ


125

Thông thường khi sử dụng capistrano, tôi sẽ tự xóa các bản phát hành cũ khỏi một ứng dụng đã triển khai. Tôi hiểu rằng bạn có thể chạy cap deploy:cleanupnhưng vẫn để lại 5 bản phát hành. Đây có phải là mục đích của nó không? Có cách nào khác để dọn sạch các bản phát hành cũ chỉ 1 lần triển khai trước đó không?


Sẽ là một ý tưởng tốt để giữ một số bản phát hành trước đó, sau đó nếu lần triển khai cuối cùng của bạn có một lỗi lớn, bạn có thể nhanh chóng quay lại với capistrano (cap triển khai: rollback) cho bản phát hành trước cho đến khi bạn sửa nó.
damoiser

Câu trả lời:


155

Bạn có thể sử dụng :keep_releasesbiến để ghi đè mặc định là 5. Kiểm tra cái này .


2
Có thể đáng lưu ý rằng ngay cả khi lệnh find + rm không xóa một số tệp, tác vụ dường như âm thầm "thành công" khi được gọi thông qua afterhook. Gọi nó trực tiếp cho thấy các lỗi ... Tôi nhận ra điều này khi tôi bắt đầu hết dung lượng đĩa.
Conny

8
@Josh Bạn đã chấp nhận câu trả lời này, nhưng bạn nên kiểm tra xem bạn đã đặt cuộc gọi lại cho "triển khai: dọn dẹp" như tôi đã nói bên dưới chưa, vì nó không chạy theo mặc định.
Diego Plentz

131

Bạn có thể làm điều này tự động bằng cách đặt điều này trong triển khai của bạn.rb

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

Trước đây (tôi không biết chính xác phiên bản nào) cuộc gọi lại này là mặc định, nhưng sau đó, nhà phát triển đã quyết định để lại cho người dùng quyết định. Trong capistrano 3, nó đã được thêm lại vào luồng triển khai mặc định.


1
Cảm ơn, Diego. Câu trả lời của bạn hoạt động chính xác trong Capistrano v2.14.1.
Scarver2


41

Nếu bạn muốn xóa tất cả các bản phát hành ngoại trừ 3 bản cuối cùng, ví dụ bạn có thể chạy:

cap deploy:cleanup -s keep_releases=3

7
Không hoạt động. optionParser::InvalidOption: invalid option: s
tuyết

0

Tôi đã có một vấn đề tương tự. Tôi muốn giữ 5 bản phát hành để triển khai bình thường nhưng cần thiết cho một số tình huống nhất định để có thể xóa tất cả các bản phát hành trước đó.

Tôi đã có thể làm điều này với một nhiệm vụ tùy chỉnh. Tạo một tập tin lib/capistrano/tasks/cleanup.rakevà thêm mã sau đây.

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

Để chạy sử dụng bundle exec cap staging cleanup_allhoặccap staging cleanup_all

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.