Go製のwebhookを使ってみる


Webhookを受けるツールを作ろうと思っていたところGo製のwebhookがあったので、使ってみました。

webhook

ドキュメント

検証環境

項目 バージョン
CentOS 7.7.1908

インストール

ビルド済みのバイナリがダウンロードできるので、今回はそちらを使います。

ダウンロードしたら解凍します。

検証

以下のシェルスクリプトを作って、webhookから実行してみようと思います。

webhookからコマンドの実行

webhookの設定ファイルはjsonで作成します。
次の設定はwebhookでリクエストを受け取った場合、スクリプトを実行します。

設定ファイル作成後にwebhookを起動します。

curlでwebhookにアクセスしてみます。
アクセスするアドレスは以下の通りです。

デフォルトはポート 9000 です。
{id} は、設定ファイルのJSONで定義したidです。
実際にアクセスするアドレスは以下のようになります。

ファイルが作成されているか確認します。
リクエストは「空」なので、空ファイルが作成されていることを確認します。

webhookからのコマンドに引数を渡す

次にwebhookから受け取ったパラメーターをコマンドの引数に渡してみます。
引数は以下のパラメーターで指定できます。

パラメーター 説明
header HTTPリクエストヘッダー
url HTTPクエリーパラメーター
payload リクエストJSON

HTTPヘッダー

HTTPヘッダーの場合は、以下のように設定します。

curlでヘッダーを指定してwebhookへアクセスします。

HTTPヘッダーがシェルスクリプトに引数で渡されたか確認します。

URLクエリー

URLクエリーの場合は、以下のように設定します。

curlでクエリーを指定してwebhookへアクセスします。

URLクエリーがシェルスクリプトに引数で渡されたか確認します。

JSON

JSONの場合は、以下のように設定します。

curlでJSONを指定してwebhookへアクセスします。

JSONのデータがシェルスクリプトに引数で渡されたか確認します。

条件指定

webhookで受け取ったパラメーターを元に条件を指定してスクリプトの実行を制御することができます。
条件は and or not が使えます。
ここでは and を例に使ってみようと思います。

以下の条件では CMDEXEC ヘッダーの値が True であればコマンドを実行するというand条件を追加しています。
ちなみに match で指定できるタイプは value regex payload-hash-sha1 ip-whitelist scalr-signature などがあります。
詳細はドキュメントを確認してください。

curlでヘッダーにTrueおよびJSONを指定してwebhookへアクセスします。

JSONのデータがシェルスクリプトに引数で渡されたか確認します。

次にヘッダーにTrue以外の文字列を指定してwebhookへアクセスします。

このように条件が満たされない場合はメッセージが表示されます。

最後に

webhook経由でコマンドを実行したい場合は、このwebhookを使う事で簡単に実装できそうですね。
Goで出来ているのでWindows/Linux/Macでも動くので、基本どこでも使えますね 🙂
色々なツールと組み合わせる事でCI/CD基盤でも有効に使えそうです。

Leave a Reply

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください