我用 Go 語言解決 Github Webhook
Github Webhook(鉤子) 說簡單點,就是當你的項目觸發了某個動作時,例如 git push
時,可以通知給一個線上可訪問的地址。
這塊我接收通知用來自動更新我服務器上的網站,不用再自己登錄服務器更新。
首先要安裝 Go 環境,查看《Go 基礎系列 | 環境搭建》。
添加 webhook
打開自己的 github 項目,然後按照如圖所示,打開 Settings > Webhooks。
打開後配置三項數據:
-
Payload URL:自己服務的 API 接口地址,用來接受 github 的通知。
-
Content type:選擇 application/json,表示使用 json 數據通知。
-
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"
}
]
}
-
bind:端口號
-
repo:接受的 github 地址。
-
branch:接受的分支。
-
script:需要執行的腳本,這個一會咱自己寫。
-
secret:上面截圖中填寫的密鑰。
下來在自己項目下寫一個 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