githubなどのwebhookをうけとる便利なGo製サーバー adnanh/webhook

hugoでビルド&プッシュしたgitリポジトリをサーバに反映させるためにwebhookが有効だと思ったのでいろいろ調べてみた結果

https://github.com/adnanh/webhook

が, シングルバイナリのこれが一番使い勝手が良かった.

設定ファイル(hooks.json)は以下

[{
    "id": "update-script",
    "execute-command": "/tmp/update-script.sh",
    "command-working-directory": "/tmp",
    "trigger-rule": {
        "and": [{
                "match": {
                    "type": "payload-hash-sha1",
                    "secret": "<<SECRET KEY>>",
                    "parameter": {
                        "source": "header",
                        "name": "X-Hub-Signature"
                    }
                }
            },
            {
                "match": {
                    "parameter": {
                        "source": "header",
                        "name": "X-GitHub-Event"
                    },
                    "type": "value",
                    "value": "push"
                }
            }
        ]
    }
}]

これでSECRET KEYで認証が行えるのと pushイベント以外は弾くようにできる.

http://<<HOSTADDR:PORT>>/hooks/update-scriptにgithubからpostが飛んでくるとあとは設定したスクリプトが実行される.

あとはsystemdなりにサービス登録しておわり.

[Unit]
Description=webhook

[Service]
User=root  
Group=root  
WorkingDirectory=/tmp  
ExecStart=/usr/local/bin/webhook -hooks /tmp/hooks.json -verbose -hotreload

[Install]
WantedBy=multi-user.target  

自分の環境はlet's encrypt + nginxでhttpsなリバプロでセキュアなフックサーバを建てた.