我用 Go 語言解決 Github Webhook

Github  Webhook(鉤子) 說簡單點,就是當你的項目觸發了某個動作時,例如 git push 時,可以通知給一個線上可訪問的地址。

這塊我接收通知用來自動更新我服務器上的網站,不用再自己登錄服務器更新。

首先要安裝 Go 環境,查看《Go 基礎系列 | 環境搭建》

添加 webhook

打開自己的 github 項目,然後按照如圖所示,打開 Settings > Webhooks。

打開後配置三項數據:

  1. Payload URL:自己服務的 API 接口地址,用來接受 github 的通知。

  2. Content type:選擇 application/json,表示使用 json 數據通知。

  3. Secret:密鑰,用來防止 API 接口地址被他人訪問。

安裝

因爲要在自己服務器上寫一個 API 接口,並且要處理密鑰,所以我自己寫了一個工具,根據配置文件就可以自定義啓動服務。

先安裝。

go get github.com/miaogaolin/webhook

配置

在自己的項目下創建一個配置文件 hooks.json。

{
  "bind"":9000",
  "items"[
    {
      "repo""https://github.com/miaogaolin/printlove",
      "branch""main",
      "script""deploy.sh",
      "secret""123"
    }
  ]
}

下來在自己項目下寫一個 deploy.sh 腳本,用來自動更新網站的代碼,這塊你根據自己的實際情況寫。

#!/bin/bash
git pull
hugo -D

因爲我的網站是用 hugo 工具生成的,所以纔有了 hugo -D 命令。

啓動

一切準備好後,就可以啓動 webhook 工具。

webhook hooks.json

如果選擇後臺跑,使用下面命令。

nohup webhook hooks.json &

運行該命令會在當前目錄下自動生成 nohup.out 文件,該文件存儲 webhook 工具的日誌。

配置 Nginx

如果你不想在使用 "IP + 端口" 形式來接受 Github 通知時,那配置個 Nginx 轉發。

server {

        server_name .printlove.cn
        ...

    location /hook {
        rewrite ^/hook / break;
        proxy_pass http://127.0.0.1:9000;
    }
}

該配置文件用來將 https://www.printlove.cn/hook 的請求轉發到 9000 端口上。

配置好後,重啓。

nginx -s reload

驗證成功

所有的都配置完成後,就可以給自己的項目中 git push ,再查看 webhook 工具的運行日誌,成功會出現如下日誌:

Run ./deploy.sh output: Updating 58ffcfd..81918f1

一切完成。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/T1X4Dx8JMwvS04HhrFI0iA