« 第11回RxTStudy勉強会を7/12土に開催します~Redmineプラグイン活用最前線 | トップページ | astah GSNを使ったゴール指向分析 »

2014/06/10

Redmineでコミットと同時にリポジトリの情報を取得する方法

Redmineでコミットと同時にリポジトリの情報を取得する方法をメモ。

【元ネタ】
小技(0.9): コミットと同時にリポジトリの情報を取得する | Redmine.JP Blog

commitが遅い。RedmineとSVNの連携を調整してみる。 ? AH-2

FAQ - Redmine

Speedup svn post-commit hook for redmine or chiliproject ? widerin.org

【1】「refs #123」「fixes #131」のようにチケット番号込みでコミットすると、Redmineリポジトリ画面にリビジョンとチケットがリンクされるようになる。
この運用が「No Ticket, No Commit」であり、トレーサビリティの効果を持つ。

しかし、Redmineのリポジトリ画面を逐一リフレッシュしなければ、リンクされない。

解決方法としては、Redmine.jpに書かれているように、リポジトリ情報取得のAPIキーを使って、HTTP通信で取得するのが簡単だ。

http://Redmineサーバ名/sys/fetch_changesets?key=APIキー&id=プロジェクト識別子

それをpost-commit-hookスクリプトに書くなり、Cronで呼び出すなりすればいい。

【2】しかし、上記の問題点としては、post-commit-hookの処理が遅い時があること、既存リポジトリから大量のリビジョン情報をHTTP通信で取得しようとするとタイムアウトが発生することがある。

前者の問題は、クライアントのコミット通知にタイムラグが発生する場合、すぐにサーバに反映されない時がある。
後者の問題は、既存リポジトリをRedmineリポジトリ画面に追加して、最新リビジョンを表示させようとすると、既存リポジトリの過去のリビジョン全てを取り込まねばならず、それに時間がかかってしまう。

前者の問題解決としては、「 > /dev/null 2>&1 & 」でfetch_changesets への通知をバックグランド処理にする。

/usr/local/bin/ruby -ropen-uri -e 'open("http://Redmineサーバ/sys/fetch_changesets?key=APIキー")' > /dev/null 2>&1 &

後者の問題解決としては、fetch_changesetsをrakeないしrubyでバッチ処理のように呼び出す。

rake -f /path/to/redmine/Rakefile RAILS_ENV=production redmine:fetch_changesets

ruby /path_to_redmine/redmine/script/runner "Repository.fetch_changesets" -e production > /dev/null 2>&1 &

こう見ると、RedmineのAPIはよくできていると思う。


|

« 第11回RxTStudy勉強会を7/12土に開催します~Redmineプラグイン活用最前線 | トップページ | astah GSNを使ったゴール指向分析 »

Redmine」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



« 第11回RxTStudy勉強会を7/12土に開催します~Redmineプラグイン活用最前線 | トップページ | astah GSNを使ったゴール指向分析 »