RedmineとGitHubを連携する

今までチケット管理もGitHubで行っていたんですが、チケットはIssueしか種類がなかったり、いろいろカスタマイズしても書き込める情報を分類しにくかったりで、チケット管理をRedmineで行うようにしました。

その際にRedmineのチケットとGitHubのコミットの関連付ける必要が出てきたので、RedmineGitHubを連携させてみました。

RedmineGitHubの連携手順をまとめてみたので、参考にしてみてもらえればと思います。

RedmineとGitHubの連携に必要なプラグインを追加する

GitHubのコミットを検知してRedmineにコミット情報を同期させるために必要なプラグインを追加します。

Redmine Github Hook pluginというプラグインを追加します。

プラグインのソースコードをRedminepluginsディレクトリに配置します。

cd /path/to/redmine/plugins
git clone https://github.com/koppen/redmine_github_hook.git

ソースコードが配置できたらRedmineを再起動します。

cd /path/to/redmine/tmp
touch restart.txt

Redmineを再起動してからRedmineのサイトにアクセスして、「管理」→「プラグイン」の順にアクセスし、プラグインの一覧に追加されていれば成功です。

RedmineサーバにGitHubのリポジトリをクローンする

GitHubのリポジトリをRedmineサーバにクローンします。この際、apacheユーザがgit pullなどをできるようにする必要があります。コマンド実行時に「sudo -u apache」をつけることで、apacheユーザにファイルやコマンドに対するアクセス権や実行権限が付与されます。

パスワード無しでリポジトリをクローンするためにGitHubDeploy keyの設定を行います。

設定方法についてはこちらを参考にしてもらえればと思います。

GitHubのリポジトリにDeploy keysを登録してパスワードなしでアクセスする

鍵を作成する際に、先頭部分に「sudo -u apache」を付けることを忘れないようにしてください。

リポジトリをクローンする

クローンする際に、--bareオプションをつけてサーバモードにする必要があります。

cd /path/to/redmine/repositories
sudo -u apache git clone --bare git@github.com:username/repository.git

Redmineにリポジトリの設定を行う

クローンしたリポジトリをプロジェクトのリポジトリに設定します。

「プロジェクトの設定」→「リポジトリ」→「新しいリポジトリ」から設定を行います。

GitHubにWebhookの設定を行う

GitHubにプッシュされたら、Redmineサーバのリポジトリに通知するためにGitHubWebhookの設定を行います。

GitHubのリポジトリのSettings」→「Webhooks」→「Add webhook」からWebhookの設定を行います。

Payload URLは下記のルールとなります。

http[s]://あなたのRedmineのURL/githook?project_id=RedmineのプロジェクトID

チケットとコミットを関連付ける

公式サイトにも説明がありますので、そちらも参考にしてもらえればと思います。

プロジェクトのリポジトリからリビジョンを選択すると「関連するチケット」を追加することができるので、そこからチケットとコミットを関連付けることができます。

ただ、それだと手作業でいちいち関連付けやらないといけないので、プッシュしたら自動で関連付けできるようにしたいと思います。

「管理」→「設定」→「リポジトリ」を開くと「コミットメッセージ内でチケットの参照/修正」というところがありますので、そこの「参照用キーワード」をコミットメッセージに追加することで、コミットとチケットの関連付けを行うことができます。

コミットメッセージの書き方はこんな感じです。

refs #99

これだけでコミットとチケットの関連付けを行うことができます。

でも、これだとチケットのステータスまではコントロールできないので、コミットでチケットのステータスや進捗をコントロールしたい場合は、「コミットメッセージ内でチケットの参照/修正」の下にある一覧で「修正用キーワード」と「ステータス」「進捗率」を設定していく必要があります。

この設定を行うと、

fixed #99とコミット時にメッセージを書くとチケットのステータスと進捗率も更新してくれるようになります。

最後に

RedmineGitHubを連携することで、GitHubissueのみでは管理が不十分になりがちな進捗管理ができるようになったり、Redmineのプラグイン次第でチケット管理以外のプロジェクト管理手法も導入できるようになります。

チケットとコミットが関連付けられることで、ソースコードの変更理由の確認も容易になります。

参考サイト