Kompira

Menu Menu

Enterprise 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)はそのリクエストの内容を解釈して利用します。  
  環境情報 本稿は、以下の環境で検証しています。
項目 バージョン
OS CentOS Linux release 7.7.1908
Kompira ver.1.5.5.post7
Redmine 4.1.1.stable
 
  Kompira REST APIの設定 Kompira REST APIを利用して、Kompiraのほぼ全ての機能をREST APIから呼び出す事が出来ます。APIを利用するためには認証のための”REST APIトークン”が必要になります。ここではrootユーザーで設定をしていきます。 [設定] -> [ユーザー管理] -> [root] -> [編集] 画面一番下の”REST API 有効化”チェックボックスをONにして[保存]をクリックします。   ユーザー設定   情報画面の画面一番下の”REST API トークン”の”トークンを表示する”をクリックし、トークンを表示します。トークンの文字列は後に利用しますので、メモ帳などにコピーしておいてください。   情報画面   REST APIのエンドポイントは以下のURLです。  
http[s]://[kompiraのhostname]/
  HTTPリクエストに次のヘッダーを含めるか、もしくは、クエリ文字列に “format=json” を含める必要があります。  
Accept: application/json
  基本的には  
http[s]://[kompiraのhostname]/[オブジェクトのパス][.メソッド名]
  でリクエストを行います。詳細はドキュメントを参照してください。   Webhookの設定 続いてRedmine側のWebhookの設定をします。まずはgithubよりRedmine webhookをインストールします。  
# cd /var/lib/redmine/plugins
# git clone git://github.com/suer/redmine_webhook.git
# /usr/local/bin/bundle install
# /usr/local/bin/bundle exec /usr/local/bin/rake redmine:plugins:migrate RAILS_ENV=production
# service httpd restart
  Redmine画面から設定をします。 [プロジェクト] -> (プロジェクト名) -> [設定] -> [webhook]   webhook設定 この画面のURLにKompiraのREST APIのURLを指定します。  
http://[KompiraのIPアドレス]/system/channels/Alert.send?format=json&token=[KompiraのREST APIトークン]
  この例ではKompiraのAlertチャネルのオブジェクトを指定します。WebhookからAlertチャネルのsendメソッドを呼び出して、メッセージを送信します。   Kompira側でのメッセージの受信 Alertチャネルからの受信内容を表示するジョブフロー「Webhook受信テスト」を作成します。  
</system/channels/Alert> ->
print($RESULT) ->
self()
  このジョブフローを実行すると、ステータスは”待ち”となり、コンソールは待機中の状態になります。Kompiraの画面はこのままにしておきます。 続いて、Redmineから新しいチケットを登録します。   Redmineチケット登録   この登録処理でWebhookが起動し、Kompiraにリクエストを送信します。Kompira側では予めジョブフロー”Webhook受信テスト”を実行中のため、Webhookが送信したデータがコンソールに表示されます。 (注意:このジョブフローは受信を続けますので、確認が終わりましたら[中止]ボタンを押して強制的に停止させてください。Kompiraの画面を切り替えてもジョブフローは動作していますので、別のAlertでメッセージを受信する処理を実行した場合に影響が出ます。)   チャネルの受信   ここで受信したメッセージの形式はWebhookの配布元サイト”https://github.com/suer/redmine_webhook“を参照してください。 一部、抜粋します。  
{
  "payload": {
    "issue": {
      "author": {
        "icon_url": "http://www.gravatar.com/avatar/example",
        "identity_url": null,
        "lastname": "user",
        "firstname": "test",
        "mail": "test@example.com",
        "login": "test",
        "id": 3
      },
      "assignee": {
        "icon_url": "http://www.gravatar.com/avatar/example",
        "identity_url": null,
        "lastname": "user",
        "firstname": "test",
        "mail": "test@example.com",
        "login": "test",
        "id": 3
      },
      "priority": {
        "name": "normal",
        "id": 2
      },
      ...
      (省略)
  }
}
  応答は辞書型のデータであるため、Kompiraのジョブフローでは”[メッセージ].payload.issue.author.icon_url”のようにメッセージ中の各要素を呼び出す事が出来ます。 JSON形式のままでは読みにくいため、ここでAlertの監視用ジョブフロー”Webhook受信テスト”を次のように変更して実行します。各項目が個別に表示されます。  
</system/channels/Alert> ->
print($RESULT) ->
[message = $RESULT] ->
print("-------------------------------------------------")->
print("新しいチケットが作成されました。")->
print("プロジェクト名:", message.payload.issue.project.name)->
print("タイトル:",message.payload.issue.subject )->
print("説明:",message.payload.issue.description)
  実行した状態でRedmineで新規チケットを作成すると、Kompiraのコンソールでは次の様に表示されます。   Webhookからの受信   ここまで、RedmineからWebhookを利用してKompiraのチャネルオブジェクトに対してREST APIでメッセージを送信し、Kompira側では受信したメッセージの各要素へのアクセス方法を見てきました。このメッセージの内容によってKompiraでの必要なジョブフローを処理を呼び出す事が出来ます。 例えば先の例では[メッセージ].payload.actionが「opened」であれば「新規チケットが作成された」事を示しています。これによりインシデントの初期対応する処理を記述したジョブフローを呼び出すなどが可能です。 Redmineのカスタムフィールドを追加する機能を使うことで、Kompiraのジョブフローで読み込むための値を登録するフィールドとして使用することで様々な応用も考えられます。
  HTTPSモードに伴う連携の失敗について ※2020/06/30追記 上述の手順をお間違いなく設定していただいたのにも関わらず連携が失敗する場合、KompiraのHTTPSモード[1]が原因の場合があります。 下記手順よりHTTPSモードを解除してから改めて連携をお試し下さい。 1. Kompiraサーバから /etc/httpd/conf.d/kompira.conf の”Rewrite”から始まる行をすべてコメントアウトする 2. 次のコマンドを実行し、httpdを再起動する  
systemctl restart httpd
  [1] HTTPによるアクセスを強制的にHTTPSにする機能

スタートガイド

Kompiraジョブフローの基礎

ジョブフローの簡単な例

Kompiraの機能

外部との連携