CircleCIを使ってbundle updateを定期実行する - Qiita
こちらの「1. CircleCIを起動する」のシェルスクリプトを Ruby スクリプトにしてみました。Heroku ボタンで簡単に設置できます。
ci-build-trigger の解説
やっていることは単純で、build_parameters に {BUNDLE_UPDATE: true}
を指定して、CircleCI のビルドを実行しているだけです。BUNDLE_UPDATE は後述する circle.yml で参照します。
Heroku ボタンをクリックしたら、App Name や Env を設定してください。
CIRCLECI_TOKEN Env は、CircleCI の Project Settings -> API Permissions から Scope が all な token を作成します。
EXEC_DAYS Env は実行する曜日です。Heroku Scheduler は実行間隔を「Daily」「Hourly」「Every 10 minutes」からしか選べません。さすがに毎日の bundle update は必要ないので、「Daily」を選択しつつスクリプトの中でこの環境変数を参照するようにしました。
カンマ区切りで 1 つまたは複数の曜日を指定することが出来ます。指定がなければ毎日 CircleCI をビルドします。
Sun
Mon,Wed,Fri
あとは Heroku Scheduler を設定するだけで、CircleCI のビルドを自動実行できます。
CircleCIの設定
前述の記事に書いてあるとおりですが、circle.yml の中で、BUNDLE_UPDATE が true の時だけ処理が切り替わるようにしました。
[2015-01-15-1] の circle.yml はこのように変わりました。
※ circle.yml の pre, override, post はよく忘れるので、リンクを張っておきます。
https://circleci.com/docs/configuration
あとはここで GitHub の token を作成 し、CircleCI の Project Setting -> Environment variables に GITHUB_ACCESS_TOKEN という名前で追加するだけです。
まとめ
CircleCI を起動する Ruby スクリプトを作成し、Heroku Button でインストール可能にしました。bundle update が必要な数だけ Heroku アプリを作成し、必要なくなったら捨てれば良いので、メンテナンスコストが少なく済みます。
追記(2015-01-25):
https://github.com/masutaka/ci-build-trigger 自体の bundle update は http://tachikoma.io を使うことにしました。外部サービス使えたら使うに越したことはないですよね。