概要
過去にshell2http というツールを使って HTTP からコマンドを発行する方法を紹介しました
今回紹介する adnanh/webhook は更に柔軟にコマンドを発行することができます
インストールから簡単な使い方を紹介します
環境
- Ubuntu 18.04
- webhook 2.5.0
インストール
今回は Ubuntu なので apt を使います
- apt-get -y install webhook
go で書かれているので go get したり自分でビルドしても OK です
apt でインストールすると自動で sysetmd 配下に登録してくれます
実行するシェルの作成
今回は簡単なシェルを作成します
現在の日付をファイルに出力するだけのスクリプトになります
- cd /tmp
- vim test.sh
#!/bin/bash
date > /tmp/result_test_shell.log
- chmod +x test.sh
hooks.json の作成
hooks.json は webhook で使用する設定ファイルです
実行するスクリプト名や各種オプションを設定します
YAML 形式でも記載できます
- cd /tmp
- vim hooks.json
[
{
"id": "test-webhook",
"execute-command": "/tmp/test.sh",
"command-working-directory": "/tmp"
}
]
複数の定義を記載することができます
id の部分は webhook でリクエストする際の URI のパス名になります
webhook の起動
では起動します
成功すると :9000 ポートで起動します
- webhook -hooks /tmp/hooks.json -verbose
-verbose を付与するとログが表示されます
systemd がすでに起動している可能性もあるのでその場合は systemd 側を停止してから起動しましょう
- systemctl stop webhook
- systemctl disable webhook
動作確認
あとは curl で動作してみましょう
パラメータがない場合は GET でも POST でも OK です
- curl localhost:9000/hooks/test-webhook
- cat /tmp/result_test_shell.log
実行後にちゃんとファイルが生成されて日付が記載されていることを確認しましょう
パラメータを付与してスクリプトを実行する方法
webhook 時に application/json で渡したデータをスクリプト内で使用することもできます
- cd /tmp
- vim test2.sh
#!/bin/bash
echo $MSG > result_test2_shell.log
- chmod +x test2.sh
MSG という変数に webhook で渡ってきたデータを格納してみます
パラメータのマッピングを定義する
webhook から送信された JSON 情報を変数に格納するマッピング情報を新たに定義します
使用するオプションは pass-environment-to-command になります
- vim hooks2.json
[
{
"id": "test-webhook2",
"execute-command": "/tmp/test2.sh",
"command-working-directory": "/tmp",
"include-command-output-in-response": true,
"pass-environment-to-command":
[
{
"envname": "MSG",
"source": "payload",
"name": "message"
}
]
}
]
source の payload は送られて来た JSON をパースすることを明示しています
JSON を使う場合は必須なのでそのまま記載します
そして JSON の message として送られてきたデータを変数 MSG に格納します
name がパース対象のフィールド名で envname が格納する変数名になります
動作確認
- webhook -hooks /tmp/hooks2.json -verbose
ではデータを送信してみます
今度は POST で application/json のデータを送信するようにリクエストを変更します
-
curl -XPOST -H 'Content-type: application/json' -d '{"message":"HELLO"}' localhost:9000/hooks/test-webhook2
これでファイルを確認すると「HELLO」と記載されているのが確認できると思います
最後に
webhook を送信するサービスはいろいろとありますがそれを受け取る場合に自分で作成する必要がありました
adnanh/webhook を使えばどんなサービスの webhook でも受けられるように汎用的に作られているので便利です
他にも XML を受け取ったりファイル、マルチパートデータを受け取ったりできるので基本な HTTP リクエストには対応しているかなと思います
0 件のコメント:
コメントを投稿