カピストラーノ-古いリリースのクリーンアップ


125

通常、カピストラーノを使用する場合は、デプロイしたアプリケーションから古いリリースを手動で削除します。実行できることは承知していますcap deploy:cleanupが、それでも5つのリリースが残っています。これは意図された目的ですか?以前のリリースを1つだけデプロイするように古いリリースをクリーンアップする別の方法はありますか?


以前のリリースをいくつか保持することは常に良い考えです。最後のデプロイに大きな間違いがある場合は、修正するまで、capistrano(cap deploy:rollback)を使用して以前のリリースに高速でロールバックできます。
damoiser 2013

回答:


155

:keep_releases変数を使用して、デフォルトの5をオーバーライドできます。これを確認てください。


2
find + rmコマンドが一部のファイルの削除に失敗した場合でも、afterフックを介して呼び出されると、タスクは警告なしに「成功」​​したように見えることに注意してください。それを直接呼び出すとエラーが表示されます...ディスク領域が不足し始めたときにこれに気付きました。
2010

8
@ジョシュあなたはこの答えを受け入れましたが、デフォルトでは実行されないので、以下で言ったように "deploy:cleanup"のコールバックを設定したかどうかを確認する必要があります。
ディエゴプレンツ

131

deploy.rbでこれを設定することにより、これを自動的に行うことができます

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

過去(私は正確にどのバージョンかわかりません)はこのコールバックがデフォルトでしたが、開発者は後でそれをユーザーに任せることにしました。capistrano 3では、デフォルトのデプロイフローに追加されました。


1
ありがとう、ディエゴ。あなたの答えはCapistrano v2.14.1で正しく動作します。
scarver2 2013年


41

たとえば、最後の3つを除くすべてのリリースを削除する場合は、次のコマンドを実行できます。

cap deploy:cleanup -s keep_releases=3

7
動作しません。optionParser::InvalidOption: invalid option: s
スノーマン2017年

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.