devlog

GitHub リポジトリに Webhook URL を登録してみた

2024-06-02

概要

  • GitHub のリポジトリに Webhook URL を登録できる
  • push やブランチの作成をトリガーに、通知できる模様
  • ミニマムでアプリを作って受信してみた

サンプルアプリ

Fiber で実装しました。

POST localhost:3000 を叩くとログが出力されリクエストボディを確認できます。
リクエストヘッダ X-GitHub-Event にイベントの名前が入ってくるようなのでログに含めてます。

main.go
package 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