Redmineでコミットと同時にリポジトリの情報を取得する方法
Redmineでコミットと同時にリポジトリの情報を取得する方法をメモ。
【元ネタ】
小技(0.9): コミットと同時にリポジトリの情報を取得する | Redmine.JP Blog
commitが遅い。RedmineとSVNの連携を調整してみる。 ? AH-2
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はよくできていると思う。
| 固定リンク
「Redmine」カテゴリの記事
- Redmineのバージョン設定でプロジェクトの設定方法が違う(2024.06.23)
- ウクライナのRedmine開発者が作ったRedmineテーマやプラグイン(2024.06.18)
- 第26回redmine.tokyo勉強会の感想~多様性はコミュニティが成功する重要な要因の一つ #redmineT(2024.06.15)
- Redmineで持ち株管理する事例(2024.04.21)
- チケットはデータでとプロセスの二面性を持つ #redmine(2023.12.24)
コメント