Capistrano-이전 릴리즈 정리


125

일반적으로 capistrano를 사용할 때는 배포 된 응용 프로그램에서 이전 릴리스를 수동으로 삭제합니다. 나는 당신이 달릴 수는 cap deploy:cleanup있지만 여전히 5 개의 릴리스를 남긴다 는 것을 이해 합니다. 이것이 의도 된 목적입니까? 이전 릴리스를 1 개의 이전 배포로 정리하는 다른 방법이 있습니까?


이전 릴리스를 유지하는 것이 좋습니다. 마지막 배포에 큰 실수가 있으면 수정하기 전까지 capistrano (cap deploy : rollback)를 사용하여 이전 릴리스로 빠르게 롤백 할 수 있습니다.
damoiser

답변:


155

:keep_releases변수를 사용하여 기본값 인 5를 대체 할 수 있습니다 . 이것을 확인하십시오 .


2
find + rm 명령이 일부 파일을 제거하지 못하더라도 after후크 를 통해 호출 될 때 작업이 자동으로 "성공"하는 것으로 보일 수 있습니다. 직접 호출하면 오류가 표시됩니다 ... 디스크 공간이 부족해질 때 이것을 깨달았습니다.
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


41

예를 들어 마지막 3을 제외한 모든 릴리스를 삭제하려면 다음을 실행할 수 있습니다.

cap deploy:cleanup -s keep_releases=3

7
작동하지 않습니다. optionParser::InvalidOption: invalid option: s
눈사람

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.