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なリバプロでセキュアなフックサーバを建てた.