Redmine でのチケット作成を Kompira Enterprise に通知する

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

ここで使う技術は大きく2つです。

(1) Kompira Enterprise の REST API
(2) Redmine の Webhook

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

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

※本稿では既に動いている Redmine サーバーがあり、管理者権限でチケット登録ができる状態を想定しています。


動作確認環境

ソフトウェア バージョン
Kompira Enterprise 1.5.5.post11
OS CentOS 7.8.2003
Redmine 4.2.1

または

ソフトウェア バージョン
Kompira Enterprise 1.6.2.post4
OS CentOS 7.8.2003
Redmine 4.2.1

Kompira Enterprise 側の REST APIの設定

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

「設定」>「ユーザー管理」>「root」>「編集」

画面一番下の「REST API 有効化」にチェックをいれて「保存」をクリックします。

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

REST API についての詳細はヘルプドキュメントや「Kompira Enterprise REST API を利用して外部からジョブフローを実行する」を参照してください。

Webhook の設定

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

$ cd /usr/src/redmine/plugins
$ git clone git://github.com/suer/redmine_webhook.git
$ sudo /usr/local/bin/bundle install
$ sudo /usr/local/bin/bundle exec /usr/local/bin/rake redmine:plugins:migrate RAILS_ENV=production

終了したら Redmine を再起動し、Redmine のプロジェクト内の「設定」>「プロジェクト」>「モジュール」から「Webhooks」にチェックを入れて「保存」をクリックして有効化します。

有効化したら、設定内に「WebHook」の項目が追加されているため、そこから設定画面に移動します。

この画面の「URL」に 以下のように Kompira Enterprise の REST API の URL を指定して「追加」をクリックします。

※本稿では Kompira Enterprise を http モードでインストールした場合で検証しています。
http モードでインストールしていない場合は、Kompira Enterprise に SSL 証明書を設定して、 http を https に読み替えてください。

http://{Kompira Enterprise サーバーの IP アドレス}/system/channels/Alert.send?format=json&token={Kompira Enterprise の REST API トークン}

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

ブラウザからのアクセスでないことを判別するため、クエリパラメータに format=json と記載する必要があります。また、認証のために先ほど取得した REST API トークンも忘れず指定してください。

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

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

</system/channels/Alert> ->
print($RESULT) ->
self()

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

続いて、以下のように Redmine から新しいチケットを登録します。

この登録処理で Webhook が起動し、Kompira Enterprise にリクエストを送信します。Kompira Enterprise 側では予めジョブフロー「Webhook受信テスト」を実行中のため、Webhook が送信したデータがコンソールに表示されます。

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

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

</system/channels/Alert> ->
[message = $RESULT] ->
print("-------------------------------------------------") ->
print("新しいチケットが作成されました。") ->
print("プロジェクト名:", message.payload.issue.project.name) ->
print("タイトル:", message.payload.issue.subject ) ->
print("説明:", message.payload.issue.description) ->
self()

メッセージは辞書型のデータであるため、ジョブフロー内では「{メッセージ}.payload.issue.author.icon_url」のように各要素を呼び出すことができます。実行した状態で Redmine で新規チケットを作成すると、Kompira Enterprise のコンソールでは次のように表示されます。

本稿では、Redmine から Webhook を利用して、 Kompira Enterprise のチャネルオブジェクトに対してREST API でメッセージを送信しました。また、Kompira Enterprise 側では、受信したメッセージの各要素へのアクセス方法を見てきました。

例えば先の例では{メッセージ}.payload.actionが「opened」であれば新規チケットが作成されたことを示しています。これにより、「payload.action が open ならインシデントの初期対応をする」といったようなジョブフローの条件処理が可能です。

Redmine のカスタムフィールドを追加する機能を使うことで、Kompira Enterprise のジョブフローで読み込むための値を登録するフィールドとして使用することもでき、様々な応用が考えられます。

TOP