「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 のジョブフローで読み込むための値を登録するフィールドとして使用することもでき、様々な応用が考えられます。