Capistrano - ล้างข้อมูลรุ่นเก่า


125

โดยปกติเมื่อใช้ capistrano ฉันจะไปและลบรุ่นเก่าออกจากแอปพลิเคชันที่ปรับใช้ด้วยตนเอง ฉันเข้าใจว่าคุณสามารถเรียกใช้งานได้cap deploy:cleanupแต่ยังคงออกได้ 5 รุ่น นี่คือจุดประสงค์? มีวิธีอื่นในการล้างข้อมูลรุ่นเก่าเพื่อปรับใช้ก่อนหน้าเพียง 1 ครั้งหรือไม่


เป็นความคิดที่ดีที่จะเก็บรุ่นก่อนหน้าไว้บางรุ่นหากคุณปรับใช้ครั้งล่าสุดมีข้อผิดพลาดใหญ่คุณสามารถย้อนกลับได้อย่างรวดเร็วด้วย capistrano (cap deploy: rollback) ไปยังรุ่นก่อนหน้าจนกว่าคุณจะแก้ไขได้
damoiser

คำตอบ:


155

คุณสามารถใช้:keep_releasesตัวแปรเพื่อแทนที่ค่าเริ่มต้นของ 5. ตรวจสอบนี้ออก


2
อาจเป็นที่น่าสังเกตว่าแม้ว่าคำสั่ง find + rm จะไม่สามารถลบไฟล์บางไฟล์ได้ แต่ดูเหมือนว่างานจะ "สำเร็จ" อย่างเงียบ ๆ เมื่อเรียกผ่านafterhook เรียกได้ว่าแสดงข้อผิดพลาดโดยตรง ... ฉันตระหนักถึงสิ่งนี้เมื่อฉันเริ่มมีพื้นที่ว่างในดิสก์หมด
conny

8
@ Josh คุณยอมรับคำตอบนี้ แต่คุณควรตรวจสอบว่าคุณได้ตั้งค่าการเรียกกลับสำหรับ "deploy: cleanup" ตามที่ฉันกล่าวไว้ด้านล่างหรือไม่เนื่องจากไม่ได้ทำงานตามค่าเริ่มต้น
Diego Plentz

131

คุณสามารถทำได้โดยอัตโนมัติโดยตั้งค่านี้ใน deploy.rb ของคุณ

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

ในอดีต (ฉันไม่รู้ว่าเวอร์ชันใดกันแน่) การโทรกลับนี้เป็นค่าเริ่มต้น แต่ต่อมาผู้พัฒนาตัดสินใจปล่อยให้ผู้ใช้ตัดสินใจ ใน capistrano 3 จะถูกเพิ่มกลับไปยังขั้นตอนการปรับใช้เริ่มต้น


1
ขอบคุณดิเอโก คำตอบของคุณทำงานได้อย่างถูกต้องใน Capistrano v2.14.1
scarver2

1
ดูเหมือนCapistrano 3 สายdeploy:cleanupเป็นส่วนหนึ่งของการไหลของการปรับใช้
Dennis

41

หากคุณต้องการลบรีลีสทั้งหมดยกเว้น 3 รายการสุดท้ายเช่นคุณสามารถเรียกใช้:

cap deploy:cleanup -s keep_releases=3

7
ไม่ทำงาน optionParser::InvalidOption: invalid option: s
Snowman

0

ฉันมีปัญหาที่คล้ายกัน ฉันต้องการเก็บ 5 รีลีสสำหรับการปรับใช้ปกติ แต่จำเป็นสำหรับบางสถานการณ์เพื่อให้สามารถลบรีลีสก่อนหน้าทั้งหมดได้

ฉันสามารถทำได้ด้วยงานที่กำหนดเอง สร้างไฟล์lib/capistrano/tasks/cleanup.rakeและเพิ่มรหัสต่อไปนี้

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

เพื่อเรียกใช้bundle exec cap staging cleanup_allหรือcap staging cleanup_all

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.