チケット管理は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のリポジトリ設定
上記で作ったリポジトリを、プロジェクトのメインリポジトリとして追加します。
プロジェクトの画面の設定>リポジトリ>新しいリポジトリ から、下記のように設定します
GitHubのWebhook
GitHubにpushされたら、redmineのリポジトリにそれを通知させるために、webhookの設定をします。手順はプラグインのreadmeに書いてあります。
下記のように、通知先のURLを設定します。
https://[your_redmine]/githook?project_id=[your_project_id]
チケットとコミット(リビジョン)の関連づけ
公式サイトにもありますが、簡単にやり方をまとめておきます。
http://redmine.jp/tech_note/subversion/
リビジョンから
リボジトリタブを開くと、リビジョンの一覧が見られます。
リビジョンをクリックすると「関連するチケット」というのがあり、そこの右端にある追加を押すと、チケット番号の入力フォームが出ます。それで、そのリビジョンとチケットを関連づけられます。
コミットから
管理>設定>リポジトリを開くと、「コミットメッセージ内でチケットの参照/修正」があります。
そこにある参照キーワードとチケット番号をコミットメッセージに含めると、そのチケットに関連づけができます。
refs #1234 hogeを修正
といれてコミットすると、#1234 のチケットに「関係しているリビジョン」というのが表示されるようになります。
まとめ
連携できると、Redmineの検索でコミットメッセージもひっかかるようになります。
どのチケットの議論でそういう実装をしたのか、このコミットはなんのための変更かなのか、といったことが追いやすくなります。
また、コミットするたびに「関係しているリビジョン」にどんどん追加されるので、進捗アピールのひとつになります。
仕様決めの経緯と実装を追跡しやすくなると、安心感が得られます。
参考サイト
-
GitHubでは上記のような、なんらかの自動化のためのアカウントをmachine-user と呼ぶようです。アカウント利用規約によると、個人でも組織でも、そういうのはひとつだけにするようにとのことです。 ↩