日々、bundle updateしてますか!
circleci-bundle-updateとcircleci-bundle-update-prを使って、bundle updateの Pull Requestを自動化する手順をまとめてみます。作者の記事を読めばいいっちゃいいんですが、地味に抜けていた手順と各ステップは何のために必要かを整理してみました。
このgemは、Pull Requestに各gemの差分リンクを貼ってくれるのが便利だな!って思って採用してます。素敵なgemをありがとうございます。
ステップは
- CircleCI経由でbotからgithubにpush出来るようにしておく
- CircleCI経由でbotからgithubにPR作れるようにしておく
- 外部からCircleCIへbuild指示できるようにする
- 外部からcronでCircleCIへbuild実行する
- CicleCIのbuild時にPRを送るようにする
といった感じです。
CircleCI経由でbotからgithubにpush出来るようにしておく
CircleCIからgithubへgit pushするのが目的です。
- githubでPRを送りたいユーザーでログインする
- CircleCIにてPRを送りたいprojectを登録する or Followする

- CircleCI経由でbotからPR出来るように鍵を登録する。Project SettingsからCheckout SSH keysからAdd user keyする

- もし、まだAuthorizeしていなかった場合は、次に「Create and add nekodayo user key」をクリックして鍵を追加

- こんな感じでkeyが追加されていればok

CircleCI経由でbotからgithubにPR作れるようにしておく
CircleCIからgithubのAPIを叩けるようにするのが目的です。
- githubでPRを送りたいユーザーでログインする
- access_tokenをrepo grantで作る

- 生成されたAccess Tokenをコピーしておく

- CircleCIの該当Project SettingsからEnvironment variablesにて
GITHUB_ACCESS_TOKENという名前で環境変数を設定する

外部からCircleCIへbuild指示できるようにする
つまり、CircleCIのAPIを叩けるようにするのが目的です。
- CircleCIの該当Project SettingsからAPI Permissionsで、Allを選択し、bundle update cron用とか適当にラベルを付ける

- 出来上がったTOKENをcron botから使う
外部からcronでCircleCIへbuild実行する
- ci-bundle-updateのheroku buttonでデプロイ
- 指示通りに環境変数を設定
GITHUB_USERNAME=botのユーザー名GITHUB_REPONAME=projectの名前CIRCLECI_TOKEN=先ほどのTOKEN
- heroku schedulerにbundle exec ruby ci-bundle-update.rbを設定
CicleCIのbuild時にPRを送るようにする
を参考に、pplogではこんな感じに設定しています。
deployment:
production:
branch: master
commands:
- |
if [ "${BUNDLE_UPDATE}" ] ; then
gem update bundler --no-document
gem install circleci-bundle-update-pr
circleci-bundle-update-pr
fi
test:
override:
- |
if [ -z "${BUNDLE_UPDATE}" ] ; then
bundle exec rspec --fail-fast
fi
こんな感じのPull Requestが届くようになります。

余談
設定している際に、botのACCESS_TOKENを持っている状態でワザワザgithu user_nameとemailを指定している箇所が無駄だなと思ったので、Pull Request送ったりしてました。
まとめ
Railsを選択するには、「それでもRailsを選択する3つの理由 - pblog」といった理由があるはずで、そのためには
- テストを書く
- 周辺gemの更新に追随し続ける
必要があります。そのためにも自動でbundle updateをして日常的に最新のgemを使うようにしたいですね。