GitHubとRedmineを連携させてチケット管理を楽にする方法

オンラインコンサルタントの直井です(^^♪

4月になり、寒暖差がとても激しいですが、いかがお過ごしでしょうか!(^^)!
冬用のアウターを完全に収納してしまったので、仕事の行はまだしも、帰りに凍えながら通勤しています(T_T)

さて、今回は表題の通りチケット管理をもっと楽に!というテーマでお話できればと思います。


チケット閉じ忘れ問題

「 問題が発生した!チケット作ろう! 」と考えチケットを追加してくれる方はかなりいらっしゃるのですが、それを終了にすることを忘れがちです….なので、「本当は終わっている」のに終了になっていないチケットが多数存在していました。

それによって、同じ意味のチケットが2つ以上存在してしまったり..なんてことも…

遠足でよく聞くフレーズのように、「チケットを閉じるまでが修正」これを開発メンバー全員に毎日チャットで送れば少しは改善するかもしれません。
しかし、こんな非効率的なことをしても互いにうっとおしいだけで、またチケットが閉じられなくなる日が目に見えています。


チケットとGitを連携させる

どうすれば、チケットの閉じ忘れが解消されるか?

修正は、いずれ origin/main ブランチにマージされます。
それは、チケットが終了したことを意味します。
ということは….
「 origin/mainにマージされた内容(コミットメッセージ等)にチケット番号があればそのチケットは終了 」にすればいいのでは?

そう考えた我々はアマゾンの奥地へ向かった…


1. 環境

1 Git(remote)
・GitHub
2 チケット管理
・Redmine( 4.1.1.stable )

今回は上記のような構成でお送りします。バージョンなどの違いで少し手順が変わっているかもしれません。

また、プラグインを導入する際に、うまくインストールできない場合があると思います。その際は、下記リンクの記事を参照ください。
https://oc-technote.com/%e6%a5%ad%e5%8b%99%e5%8a%b9%e7%8e%87up/redmine%e3%81%ab%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e3%82%92%e5%85%a5%e3%82%8c%e3%82%8b%ef%bc%81/


2. 手順

2 – 1 redmine_github_hookについて

今回利用するプラグインは「 redmine_github_hook 」です。
こちらのプラグインがどのように動作するか、簡単に説明すると下記のような形です。

①:プラグインを発火させるためのURLを踏む
②:git fetchでリモートリポジトリとプラグイン内部にあるローカルリポジトリを同期
③:コミット内容を読み込んで、チケットのアクションを実行(終了や関連付け)

サクッと①を行うことで自動的に②、③が実行されます。詳しいライフサイクルはこちら

なんて便利なプラグインなのでしょうか!デフォルトで入っていてもいいような気がしますが…
しかし、今回実現したいことをやろうとするといまいちな箇所があります。

・②を実行すると、developや開発途中のリモートブランチなどの変更も読み取って終了になってしまう(git fetchですべてのブランチの変更をくみ取るため)


2 – 2 Redmineにプラグインを追加

redmineアプリディレクトリのpluginsディレクトリ配下にプラグインファイルを配置します。(bitnamiスタックの場合「~/stack/apps/redmine/htdocs/plugins」の可能性が高いです。)
また、今回使用するプラグインは「redmine_github_hook」ですが、ほかのプラグインも同様の手順でインストールすることができます。

今回、マスターにブランチにマージされた内容だけをくみ取りたいので、下記URLからプラグインを追加
https://github.com/asurann123/redmine_github_hook

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

このリポジトリで変更している箇所は、「app/services/github_hook/updater.rb」の最下部にある関数を変更しています。環境によってはmainブランチだったりするかもしれないので、適宜変更をお願いします。(Gitがうまく吸収してくれる可能性あるかも?)

ここまで来たら、後はreadmeにある内容の通りです。

アプリケーションのトップディレクトリに戻っておく(bitnamiの場合)

cd ~/stack/apps/redmine/htdocs/

gem追加

gem "redmine_github_hook"

インストール

 bundle install --no-deployment

マイグレーション

 bundle exec rake redmine:plugins:migrate RAILS_ENV=production

再起動(bitnamiの場合)

sudo /opt/bitnami/ctlscript.sh restart

2 – 3 プラグイン用にリポジトリをclone

bareオプションを追加して適当な場所にリポジトリをクローン

 git clone --bare <Repos URL or SSH>

リモートを追加

git remote add origin <Repos URL or SSH>

2 – 4 プロジェクトにリポジトリを設定

プロジェクトの「設定」から「リポジトリ」を選択し、「新しいリポジトリ」をクリック

先ほどクローンしたpathを入力する。メインであればメインにチェックし、識別子があると後々わかりやすいが、記入しなくてもいい

2 – 5 発火URLの設定

ここまででとりあえずGitとRedmineの連携設定は完了です。しかし、動作させるには発火URLを踏む必要があります。

ほかのサイトを参考にすると、Github Actionsを利用したりしています。
今回は、デプロイの1セクションにこれを追加しようと思います。

簡単にPythonファイルを作成して、デプロイのお好きなタイミングにこのPythonファイルを実行するだけです。AWSをご利用の場合、CodePiplineなどを利用されていると思いますので、その間にLambdaで発火させるだけです。


import requests

response = requests.post('https://<your domain>/github_hook?project_id=<project_id>',params={"project_id":"<project_id>"})

3 . 最後に

かなり超大作になってしまいました💦しかし、同じような内容でお困りの方が少しでも参考になればと思います。

一年前に作業した内容なので、もしかすると情報が古い可能性があります。

次回は、「 コミットメッセージにチケット番号がない場合に警告を出すGithook 」編でお会いしましょう!