俺得な保存版記事です。設定するたびにやり方を思い出すのが面倒になり。
1. CircleCI の設定
GitHub の Personal access tokens
のページで token を作成し、
CircleCI の Project Setting -> Environment variables に
GITHUB_ACCESS_TOKEN という名前で追加します。
CircleCI の URL は以下になります。
https://circleci.com/gh/{ユーザ名}/{リポジトリ名}/edit#env-vars
2. circle.yml の変更
このように circle.yml の deployment section を変更します。
https://github.com/masutaka/masutaka-29hours/commit/0ba9ef03348568baaa5cf271d4f6e41305f8fdfe
環境変数 BUNDLE_UPDATE が指定されていたら、
circleci-bundle-update-pr gem をインストールして、同コマンドを実行
しています。この環境変数は後述するトリガーが設定してきます。
circleci-bundle-update-pr コマンドでは以下が実行されます。
- bundle update を実行する
- Gemfile.lock に差分があれば、git commit し、GitHub のリモートブランチに git push する
- GitHub の Pull Request を作成する
- アップデートした Gem の差分へのリンクをコメントとして POST する
bundler もアップデートしているのは、1.10.0 から Gemfile.lock に追
記される BUNDLED WITH 対策のためです。
Ruby - BUNDLED WITH で Gemfile.lock が更新されてしまう件 - Qiita
bundler のアップデートに気づけるので、ローカルの bundler をアップ
デートしようかという気持ちになります。
3. トリガーの作成
最後に Heroku にトリガーアプリをデプロイします。やり方は簡単。
https://github.com/masutaka/ci-build-trigger
の Heroku ボタンを
クリックするだけ。説明の通りに設定すれば迷わないはず。
現在の Heroku Scheduler の設定
そこそこ増えてきました。複数リポジトリを指定できるようなツールを作
ろうかしら…。
Fri 08:00 UTC | awesome-github-feed |
Fri 08:30 UTC | masutaka-29hours |
Fri 09:00 UTC | masutaka-metrics |
Fri 09:30 UTC | masutaka.net |
Fri 10:00 UTC | server-masutaka.net |
※ 業務でもいくつかのリポジトリで設定してます。
こんな Pull Request が作られる
CircleCI をお使いの皆さんは CI も設定済みでしょうから、この Pull
Request の作成をトリガーにして、当然 CI も実行されます。
テストが通ったことを表す緑の✓をクリックすれば、CircleCI の当該ペー
ジにジャンプします。warning や deprecated message が増えていないか
を必ず確認します。
なぜ継続的に bundle update するのか
継続してサービスを運用し続けるためには、使っている Gem をアップデー
トし続ける必要があります。
Gem が古いとセキュリティアップデートができなくなったり、使っている
サービスの仕様変更に置いて行かれる可能性があります。
これは始めてから気づいたことですが、自分が使っている Gem の変更を
キャッチアップしやすくなりました。半年に一回のアップデートでは変更
点が膨大になりますが、週に一度ならそれほどでもありません。
他の方法
http://tachikoma.io/ はもっとお手軽です。
ただし、現在はアップデートした Gem の差分へのリンクは分かりません。
時間や曜日を指定することも出来ないと思います。
あとがき
以下の記事をまとめてスリムにしたのがこの記事です。
- CircleCIを使ってbundle updateを定期実行するHerokuアプリを作った [2015-01-25-1]
- 継続的bundle updateを簡単に導入できるGemを作った [2015-03-03-1]
間違いなどあれば、下のコメント欄か @masutaka までお知らせください。
追記(2015-08-29):
YAPC::Asia Tokyo 2015 のセッションで紹介されました。ありがとうございます。
10:40 からです。
資料はこちら。25 ページ目です。
esa.io - 趣味から育てたWebサービスで生きていく // Speaker Deck
追記(2015-12-23):
@ppworks
さんがより分かりやすいまとめ記事を書いて下さいました。
ありがとうございます!
Circle CIでbundle updateのPull Request作成を自動化する手順 - pblog
追記(2016-10-10):
今後はこちらの README.md をメンテナンスしていきます。