GitHubとRedmineをWebhooksで連携させる方法

 2021.10.18  ストレージチャンネル

Redmineは日本国内で広く使われているオープンソースのプロジェクト管理ソフトウェアです。タスクなどを「チケット」に登録し、ガントチャートやカレンダーなどで表示させ、プライオリティなどを設定しプロジェクトの進捗をリッチな機能で管理することができます。プラグインを使った機能拡張も充実しており、GitHubと連携させGitHubのIssues機能とは別に使用することが出来ます。GitHubのIssueとRedmineのチケットを結び付けてステータスの同期を行ったり、GitHub内のリポジトリの変更点やその変更をしたユーザ情報などをRedmineから確認することが出来ます。

GitHubでは他のツールと統合するための仕組みとして、「GitHub Services」 または 「GitHub Webhooks」 という機能が使われてきました。しかし、そのうちの一つの「GitHub Services」機能のサポートが2018年10月に廃止されました。Redmineとの連携は「GitHub Services」が使われる事例がよくありますが今後は外部サービスとの連携の際は「GitHub Webhooks」で行う必要があるため、本記事では「GitHub Webhooks」機能を使ったRedmineとの連携方法についてご紹介します。 

「GitHub Services」の廃止に向けてのタイムライン

GitHub Enterprise  

GitHub Enterprise 2.17(2019年以降リリース予定)からGitHub Servicesのインストールや設定が出来なくなります。

~GitHub.com

2018101日:GitHub Servicesのインストールができなくなり、UIから削除されました。2019131日:インストール済みのGitHub Servicesとの連携が出来なくなりました。

GitHub Servicesの設定画面
上図は、様々なツールに対応しているGitHub Servicesの設定画面。GitHub Enterprise 2.17以降は廃止。

仮想化システムに最適!ネットアップではじめるオールフラッシュストレージ
Google Cloud VMware Engine と NetApp Cloud Volumes ONTAP で新たなDR対策やクラウドシフトを強力にサポート

Webhooksとは

WebhooksはGitHub上でのイベントを起点に、外部にHTTPでイベント内容を送ることが出来る機能です。Webhooksを送るイベントをRepositoryごとに設定することが出来ます。例えば、Gitのリポジトリにプッシュされた時やPull requestが作られた時などのイベント発生時に連携をしているツールにイベントを送ることが出来ます。

Webhookが送信されるように設定上図は、PushイベントにのみWebhookが送信されるように設定しています。 

GitHubとRedmineを連携したらどんなことができるのか?

1. Redmine上でGitHub のCommit情報を閲覧することができます。

Commitの差分をRedmineで確認

Commitの差分をRedmineで確認ができます。

Commitの差分をRedmineで確認2

2. GitHubでCommitする際にCommitメッセージに特定のキーワードを含めるとRedmineのチケットと紐付けすることができます。(下図の”refs”キーワードはRedmineで予め認識するように設定してあります) 

GitHubで以下のようにCommitをすると、

2. RedmineにそのCommitが反映

RedmineチケットにCommitが表示されるようになります。      

RedmineチケットにCommitが表示

3. GitHubでCommitする際にCommitメッセージにキーワードを含めるとRedmineのチケットのステータスを変更することも出来ます。(以下の”Close”キーワードはRedmineで予め認識するようにしてあります)

GitHubで前項同様にCommitをすると、

GitHubで前項同様にCommit

Redmineチケットのステータスが変更されます。  

Redmineチケットのステータス

GitHub と Redmineの連携設定手順

ここではGitHub EnterpriseとRedmineを連携するために必要な設定などをご説明します。

前提

  • Unix/LinuxでRedmine 2.0以上のインストール
  • 最新のGit

GitRedmine GitHub Hookプラグイン

最新版のGitRedmine GitHub Hookプラグインのインストール

1. Redmineがインストールされているサーバで作業します。

2. Redmineのディレクトリに移動し、localファイルにgem "redmine_github_hook" を下図のように追記します。

gem 22redmine_github_hook22の追記Gemfile.localまたはGemfile

3. bundleコマンド実行します。

3. bundleコマンド実行

4. Redmineサービスを再起動します。

5. プラグインのインストール状態を確認します。
    http(s)://[redmine-hostname]/admin/plugins

5. プラグインのインストール

Redmineの設定

1. Redmineのサーバにredmineユーザで接続します。

2. Gitリポジトリを管理させるディレクトリに移動します。

3. GitHub Enterpriseのリポジトリを”mirror”オプション付きでCloneします。
    $ git clone --mirror git@[github-hostname]:owner/repository.git

※注意事項
gitはSSHプロトコルでの接続が必須となるのでご注意ください。もし、git cloneに失敗する場合はユーザがリポジトリのRead権限を与えられているかご確認ください。
SSH鍵をGitHubのユーザに登録していない場合は以下の方法で作成します。
 1. Redmineホスト端末にてパスワード無しSSH鍵の生成する
         ssh-keygen -t rsa -b 4096 -C your_email@example.com

     2. 生成されたSSH公開鍵 (id_rsa.pub)の中身をGitHubアカウントに登録する
         http(s)://[github-hostname]/settings/keys

2. 生成されたSSH公開鍵2. 生成されたSSH公開鍵2

     3. Redmineのサーバにてgit cloneを実行し動作確認します
         $ git clone --mirror git@[github-hostname]:git_user/project.git

     4. Cloneしたリポジトリのディレクトリに移動し、 ”git fetch”コマンドで更新を試します。

          $ cd project.git
          $ git fetch -q --all -p

上手くプラグイン(Redmine GitHub Hook)が動作しない場合は、プラグインの公式ページ (英文) などで確認も出来ます。
https://github.com/koppen/redmine_github_hook

RedmineGitHubリポジトリの追加

1.  Redmineのプロジェクトを選択、または新規で作成します。

2.  プロジェクトの設定にて新しいリポジトリを作成します。

5. プラグインのインストール

3. バージョン管理システムをGitに設定します。

    リポジトリのパスはGitのリポジトリのパスを入力します。

new-repository

4. プロジェクトのリポジトリを確認し、 Commitの履歴が表示されているかを確認します。

 Commit履歴

GitHubの設定

1. リポジトリの設定に移動し、Webhookを追加します。設定にはリポジトリのAdmin権限が必要です。

1-repository-settings

2. Payload URLは次のフォーマットで入力します。
 http://[Redmine-hostname]/github_hook?project_id=[Redmine-projectname] 

“Which events would you like to trigger this webhook?” の項目ではWebhookが送信されるイベントを指定します。今回はPushイベントのみ設定します。 

Pushイベント設定

3.  Webhookを登録後はテストWebhookが送信されるため、同じ画面にて“Recent Deliveries”から正しく送信されているかを確認します。

Recent Deliveries

動作確認

1. Commitをします。

1. Commit
2. RedmineにそのCommitが反映されます。

2. RedmineにそのCommitが反映 

リビジョン

「最新リビジョン」でCommitの差分が確認できます。 

latest-revisionリビジョン-1

チケットとCommitの結び付け

GitHubのCommitメッセージに「refs,references,IssueID」いずれかのキーワードとチケット番号を含めるとRedmine上のチケットとCommitを結び付けすることができます。

1. トップの「管理」⇒「設定」でキーワードの確認と設定ができます。

confirmation-of-keywords

2. Commitメッセージに「refs #チケット番号(Redmine)」を含めてCommitをします。

refs #チケット番号(Redmine)

3. するとRedmineのチケットの「関係しているリビジョン」に紐付けされたCommitが表示されます。

related-revisions

チケットのステータス変更

Commitメッセージに指定したキーワードを含めるとRedmineチケットのステータスを変更することができます。

1. Redmineのトップの「管理」⇒「設定」でキーワードとステータスを指定できます。

keywords-and-status 

2. Commitメッセージに指定したキーワード「Close #Redmineチケット番号」を含めます。

Close #Redmineチケット番号

3. するとRedmineのチケットのステータスが変更されます。

チケットのステータス

4. ステータスの種類は「新規、進行中、解決」などがあるため、それぞれお試しください。

4. ステータスの種類

 

GitHubとRedmineWebhooksを使った連携方法は以上になります。

CTA

RECENT POST「トレンド」の最新記事


トレンド

NetAppが実現するポータビリティ、そしてプロジェクトAstraとは

トレンド

プロジェクト管理者は押さえておきたいプログラミングの基礎知識

トレンド

ソフトウェア開発プロセスとは?

トレンド

アジャイル開発とスクラム開発

GitHubとRedmineをWebhooksで連携させる方法