Edited at

RedmineとGitHubを連携

More than 1 year has passed since last update.

チケット管理はRedmine、ソース管理はGithubでやっていたのですが、チケットとコミットの関連付けが欲しくなったので、RedmineとGitHubを連携させることにしました。

よくあるネタですが、GitHubとの連携のところですこしつまずいたので、ちょっとまとめてみました。


RedmineのリポジトリとGitHub上のリポジトリを連動させる


プラグイン追加

下記を追加します。

https://github.com/koppen/redmine_github_hook


  • gemの追加

sudo gem install json


  • ソースの配置

cd <REDMINE_ROOT>/plugins

git clone https://github.com/koppen/redmine_github_hook.git


  • Redmineの再起動

cd <REDMINE_ROOT>/tmp

touch restart.txt

上記をしてから、redmineのサイトにアクセス。

管理ページ>プラグインに追加されていれば成功。


Redmineサーバ上にリポジトリをclone

GitHubのリボジトリをcloneします。apacheユーザがgit pullなどをできるような形にする。

ここでつまずいたのですが、sudo -u apache をつけることで解決できました。以降のコマンドは、その前提のものとします。


GitHubのdeploy key用の鍵作成

参照だけで良いので、デプロイキーに登録する公開鍵を作成します。

※ プロジェクト毎に別のリポジトリを連携させるには、deploy keyではできない。複数のリポジトリにアクセス権を持つ専用ユーザ1を作成して、そのユーザに対して公開鍵を登録すること。

ssh-keygen -t rsa

/var/www/.ssh に鍵を配置。(ownerをapacheに)

パスフレーズなし。

作成された公開鍵をGitHubリポジトリのSetting>Deploy Keys から登録

https://developer.github.com/guides/managing-deploy-keys/


git clone

--bare をつけて、サーバモードにする必要があるようです。

cd /opt/repos

git clone --bare git@github.com:XXXXXXXXXXX/hoge.git

リモートの設定をして、fetchできるようにします。

git remote add origin git@github.com:<username>/<project>.git


Redmineのリポジトリ設定

上記で作ったリポジトリを、プロジェクトのメインリポジトリとして追加します。

プロジェクトの画面の設定>リポジトリ>新しいリポジトリ から、下記のように設定します

repo_setting.jpg


GitHubのWebhook

GitHubにpushされたら、redmineのリポジトリにそれを通知させるために、webhookの設定をします。手順はプラグインのreadmeに書いてあります。

下記のように、通知先のURLを設定します。

https://[your_redmine]/githook?project_id=[your_project_id]


チケットとコミット(リビジョン)の関連づけ

公式サイトにもありますが、簡単にやり方をまとめておきます。

http://redmine.jp/tech_note/subversion/


リビジョンから

リボジトリタブを開くと、リビジョンの一覧が見られます。

リビジョンをクリックすると「関連するチケット」というのがあり、そこの右端にある追加を押すと、チケット番号の入力フォームが出ます。それで、そのリビジョンとチケットを関連づけられます。


コミットから

管理>設定>リポジトリを開くと、「コミットメッセージ内でチケットの参照/修正」があります。

そこにある参照キーワードとチケット番号をコミットメッセージに含めると、そのチケットに関連づけができます。

image

refs #1234 hogeを修正 といれてコミットすると、#1234 のチケットに「関係しているリビジョン」というのが表示されるようになります。


まとめ

連携できると、Redmineの検索でコミットメッセージもひっかかるようになります。

どのチケットの議論でそういう実装をしたのか、このコミットはなんのための変更かなのか、といったことが追いやすくなります。

また、コミットするたびに「関係しているリビジョン」にどんどん追加されるので、進捗アピールのひとつになります。

仕様決めの経緯と実装を追跡しやすくなると、安心感が得られます。


参考サイト

http://hidechae.hatenablog.com/entry/2013/02/28/034126

http://qiita.com/kp_ohnishi/items/a15022efc6392ae2b51e

http://kentana20.hatenablog.com/entry/2014/03/30/090000





  1. GitHubでは上記のような、なんらかの自動化のためのアカウントをmachine-user と呼ぶようです。アカウント利用規約によると、個人でも組織でも、そういうのはひとつだけにするようにとのことです。