2024-06-02
概要
- GitHub のリポジトリに Webhook URL を登録できる
- push やブランチの作成をトリガーに、通知できる模様
- ミニマムでアプリを作って受信してみた
サンプルアプリ
Fiber で実装しました。
POST localhost:3000
を叩くとログが出力されリクエストボディを確認できます。
リクエストヘッダ X-GitHub-Event
にイベントの名前が入ってくるようなのでログに含めてます。
main.gopackage main import ( "github.com/gofiber/fiber/v3" "github.com/gofiber/fiber/v3/middleware/logger" ) func main() { app := fiber.New() // ログ app.Use(logger.New(logger.Config{ Format: "[${time}] ${status} ${reqHeader:X-GitHub-Event} ${body}\n", })) // webhook の送信先 app.Post("/", func(c fiber.Ctx) error { return nil }) app.Listen(":3000") }
サンプリアプリを起動し Cloudflare Tunnel で中継
Webhook なので受信側のサーバをインターネットに公開する必要があります。
手っ取り早く用意したかったので Cloudflare Tunnel で localhost:3000 を中継してみました。
cloudflared のインストール
brew install cloudflared
localhost:3000 の立ち上げ
先ほどのアプリを実行して localhost:3000 にサーバを立ち上げます
$ go run . _______ __ / ____(_) /_ ___ _____ / /_ / / __ \/ _ \/ ___/ / __/ / / /_/ / __/ / /_/ /_/_.___/\___/_/ v3.0.0-beta.2 -------------------------------------------------- INFO Server started on: http://127.0.0.1:3000 (bound on host 0.0.0.0 and port 3000) INFO Total handlers count: 2 INFO Prefork: Disabled
Cloudflare Tunnel で中継
コマンド一発です。
実行すると cloudflare のURLがログに出力され、そこに localhost:3000 が中継されます。
$ cloudflared tunnel --url localhost:3000 2024-06-02T07:58:22Z INF Requesting new quick Tunnel on trycloudflare.com... 2024-06-02T07:58:23Z INF +--------------------------------------------------------------------------------------------+ 2024-06-02T07:58:23Z INF | Your quick Tunnel has been created! Visit it at (it may take some time to be reachable): | 2024-06-02T07:58:23Z INF | https://xxxxxxxxx.trycloudflare.com | 2024-06-02T07:58:23Z INF +--------------------------------------------------------------------------------------------+
GitHub リポジトリに Webhook を登録する
Cloudflare Tunnel のURLをGitHubに登録します。
リポジトリの Settings に Webhook というセクションがあるので登録ください。
受信確認
push イベントが Webhook で通知されるか確認します。
普通に commit & push してみると..
$ go run . _______ __ / ____(_) /_ ___ _____ / /_ / / __ \/ _ \/ ___/ / __/ / / /_/ / __/ / /_/ /_/_.___/\___/_/ v3.0.0-beta.2 -------------------------------------------------- INFO Server started on: http://127.0.0.1:3000 (bound on host 0.0.0.0 and port 3000) INFO Total handlers count: 3 INFO Prefork: Disabled INFO PID: 57869 INFO Total process count: 1 [16:00:42] 200 ping {"zen":"Favor focus over features.", ... [16:10:39] 200 push {"ref":"refs/heads/main","repository":{"name":"webhook-receive-prototype-app", ... [16:12:27] 200 push {"ref":"refs/heads/main","repository":{"name":"webhook-receive-prototype-app", ...
無事、受信できました。
今回は push イベントのみ確認しましたが、他にもいろいろイベントがあるようです。
Links
感想
お手軽でした。
送信履歴の確認やイベントの指定もできるので、支障なく連携できそうです。
GitHub Actions や GitHub App とユースケースが被っている気もしますが、 往々にして、イベント通知で連携したいときはあるので、選択肢がいろいろあるのは理想的だなあ、と思いました。
作成日
2024-06-02
更新日
2024-06-02