Technical information

外部との連携 Redmineでのチケット作成をKompiraに通知する

Redmineへ新規チケットを登録する」でRedmineへ新規チケットを登録する方法をご紹介しましたが、本記事では逆にRedmineにチケットが登録されたら、それをトリガーとしてKompiraにチケットの内容を通知する方法をご紹介します。Kompira側では通知された内容に応じて、状況確認、リカバリー、担当者への通知などの処理を起動する事が出来ます。

ここで使う技術は大きく2つです。
(1) KompiraのREST API
(2) RedmineのWebhook

Kompiraを外部から操作するにはREST APIを利用します。RedmineからREST APIを呼び出すにはWebhookを利用します。

WebhookはWebコールバックなどと呼ばれる場合もありますが、あるアプリケーションから別のアプリケーションに対してリアルタイムに情報提供を行うための仕組みです。通常、Webhookは指定されたアプリケーションに対してHTTPリクエストを送信し、受信側(今回はKompira)はそのリクエストの内容を解釈して利用します。

※本記事の内容の動作確認にはRedmine3.2.4を使用しています。

 
Kompira REST APIの設定

Kompira REST APIを利用して、Kompiraのほぼ全ての機能をREST APIから呼び出す事が出来ます。APIを利用するためには認証のための”REST APIトークン”が必要になります。ここではrootユーザーで設定をしていきます。

[設定] -> [ユーザー管理] -> [root] -> [編集]

画面一番下の”REST API 有効化”チェックボックスをONにして[保存]をクリックします。

ユーザー設定

情報画面の画面一番下の”REST API トークン”の”トークンを表示する”をクリックし、トークンを表示します。トークンの文字列は後に利用しますので、メモ帳などにコピーしておいてください。

情報画面

REST APIのエンドポイントは以下のURLです。

HTTPリクエストに次のヘッダーを含めるか、もしくは、クエリ文字列に “format=json” を含める必要があります。

基本的には

でリクエストを行います。詳細はドキュメントを参照してください。

 
Webhookの設定

続いてRedmine側のWebhookの設定をします。まずはgithubよりRedmine webhookをインストールします。

Redmine画面から設定をします。
[プロジェクト] -> (プロジェクト名) -> [設定] -> [webhook]

webhook設定

この画面のURLにKompiraのREST APIのURLを指定します。

この例ではKompiraのAlertチャネルのオブジェクトを指定します。WebhookからAlertチャネルのsendメソッドを呼び出して、メッセージを送信します。

 
Kompira側でのメッセージの受信

Alertチャネルからの受信内容を表示するジョブフロー「Webhook受信テスト」を作成します。

このジョブフローを実行すると、ステータスは”待ち”となり、コンソールは待機中の状態になります。Kompiraの画面はこのままにしておきます。

続いて、Redmineから新しいチケットを登録します。
Redmineチケット登録

この登録処理でWebhookが起動し、Kompiraにリクエストを送信します。Kompira側では予めジョブフロー”Webhook受信テスト”を実行中のため、Webhookが送信したデータがコンソールに表示されます。
(注意:このジョブフローは受信を続けますので、確認が終わりましたら[中止]ボタンを押して強制的に停止させてください。Kompiraの画面を切り替えてもジョブフローは動作していますので、別のAlertでメッセージを受信する処理を実行した場合に影響が出ます。)

チャネルの受信

ここで受信したメッセージの形式はWebhookの配布元サイト”https://github.com/suer/redmine_webhook“を参照してください。

一部、抜粋します。

応答は辞書型のデータであるため、Kompiraのジョブフローでは”[メッセージ].payload.issue.author.icon_url”のようにメッセージ中の各要素を呼び出す事が出来ます。

JSON形式のままでは読みにくいため、ここでAlertの監視用ジョブフロー”Webhook受信テスト”を次のように変更して実行します。各項目が個別に表示されます。

実行した状態でRedmineで新規チケットを作成すると、Kompiraのコンソールでは次の様に表示されます。

Webhookからの受信

ここまで、RedmineからWebhookを利用してKompiraのチャネルオブジェクトに対してREST APIでメッセージを送信し、Kompira側では受信したメッセージの各要素へのアクセス方法を見てきました。このメッセージの内容によってKompiraでの必要なジョブフローを処理を呼び出す事が出来ます。
例えば先の例では[メッセージ].payload.actionが「opened」であれば「新規チケットが作成された」事を示しています。これによりインシデントの初期対応する処理を記述したジョブフローを呼び出すなどが可能です。
Redmineのカスタムフィールドを追加する機能を使うことで、Kompiraのジョブフローで読み込むための値を登録するフィールドとして使用することで様々な応用も考えられます。