おもしろwebサービス開発日記

Ruby や Rails を中心に、web技術について書いています

tachikoma を使って毎日自動で bundle update

sanemat さんが作っている tachikoma という gem があります。tachikoma の機能は簡単に言うと「github の指定のプロジェクトで bundle update して、差分を pull request してくれる rake タスク」です。cron や jenkins などで定期的に実行するようにすると、依存する gem のバージョンを常に最新に保つことができます。べんり!

そんなべんりな tachikoma なのですが、ドキュメントが分かりづらくて損をしている気がします…><。すこしでも足しになるように、僕が作っている revenger というプロジェクト(github 上のプライベートリポジトリに置いてある)の tachikoma 設定手順をまとめましたのでご参考あれ。

前提

  • github のプライベートリポジトリで管理してる
  • jenkins サーバ上で定期実行する

この前提以外の方は適宜自分の環境に読み替えてください

準備

まず、 github で tachikoma 用のサブアカウントを作成します。別に作らなくても tachikoma は動かせるのですが、他人からの pull request でないと github の notification には現れません。そのへん気にならない方は作らなくても大丈夫です。

その後、サブアカウントの Personal Access Tokens を入手します。

skitch

上記画像の Create New Token をクリックすると入手できます。

次に、tachikoma のワーキングディレクトリを作ります。jenkins 上で実行させたいので、jenkins の workspace 配下にディレクトリを作っています。

cd /path/to/jenkins/workspace
mkdir revenger-tachikoma

Gemfile を作って bundle install します。--path はお好みで。

cd revenger-tachikoma
bundle init
echo "gem 'tachikoma'" >> Gemfile
bundle install --path vendor/bundle

次に下記のコマンドで tachikoma で必要なファイルを生成します。

bundle exec tachikoma init

実行すると下記のような出力が得られます。

appended .gitignore
appended Rakefile
created data/
created data/__user_config__.yaml
created data/bot-motoko-tachikoma.yaml
created repos/
created repos/.gitkeep
tachikoma init completed!
You might want to see README!

ここから設定ファイルを作っていきます。

まずは data/__user_config__.yaml を編集します。ここでは pull request を送るユーザ情報と、pull request の文章を設定しています。僕は下記のように設定しています。

commiter_name:
  'willnet-bot'
commiter_email:
  'netwillnet+bot@gmail.com'
github_account:
  'willnet-bot'
pull_request_body:
  ':hamster::hamster::hamster:'

次に data/revenger.yaml を作成します。もちろん "revenger" の部分はあなたのアプリの名前に変更してくださいね。ここではプロジェクト固有の設定を入れます。注意したいのは、リポジトリの url を https:// の scheme で書くこと。git@... の方だといまのところうまく動かないはずです。

url:
  'https://github.com/willnet/revenger.git'
type:
  'private'
language:
  'ruby'
version:
  '2.0.0'

これでひとまず準備完了。下記のコマンドでちゃんと動くか確かめてみましょう。

BUILD_FOR=revenger TOKEN_REVENGER=サブアカウントのPersonalAccessToken bundle exec rake tachikoma:load tachikoma:fetch tachikoma:bundle tachikoma:pull_request

うまく動いたら jenkins 上で revenger-tachikoma というジョブをつくります。僕は下記のように設定して、毎朝7時に定期実行するようにしました。

スクリーンショット 2013-09-23 23.08.16

試しにビルド実行してみて、うまく動いたら完了です。お疲れ様でした。楽しい bundle update ライフをお楽しみください。