GO 使用Webhook 實現github 自動化部署

周伯通的麥田發表於2020-05-25

通常大家開發大部分是本地git push 提交,伺服器上git pull 手動更新。git 可以使用webhook實現自動部署。
webhook是倉庫平臺的一個鉤子事件,通過hook 鉤子監聽程式碼,回撥通知(通知地址就是你在各個git倉庫平臺中填寫的webhook地址,
一般在你的某個專案倉庫如myproject.git裡面的設定中)倉庫平臺填寫的地址。
其實原理流程就是:

所以自動部署主要實現方式就是:

- 修改程式碼 push

- github(其他倉庫平臺)傳送請求給你的網站伺服器

- 網站伺服器收到更新請求,執行自動部署指令碼

- 自動部署指令碼執行程式碼拉取,打包,修改檔案等動作完成網站的更新部署

1. 下載github-webhook工具:

wget http://img.sgfoot.com/github-webhook1.4.1.linux-amd64.tar.gz

2. 執行github-webhook 安裝

tar -zxvf github-webhook1.4.1.linux-amd64.tar.gz
cp github-webhook /usr/bin/
chmod u+x /usr/bin/github-webhook

3.執行方式

預設埠: 2020,可以更改, http的路由: /web-hook
有效訪問地址: http://ip:2020/web-hook
-b 是shell指令碼路徑引數
-s 是github webhook設定的密碼

引數說明:

# 非後臺執行
github-webhook -b [shell指令碼路徑] -s [github webhook設定的密碼]

# 後臺執行
nohup github-webhook -b [shell指令碼路徑] -s [github webhook設定的密碼] & 

# 定向日誌輸出
nohup github-webhook -b ~/sh/你的指令碼.sh -s hook密碼 >> ~/logs/webhook.log 2>&1 &

特性介紹

  • 直接執行二進位制檔案
  • 自定義指令碼路徑
  • 自定義密碼
  • 自定義埠. 0 ~ 65535
  • 安靜模式
GLOBAL OPTIONS:
   --bash value, -b value    Execute the script path. eg: /home/hook.sh
   --port value, -p value    http port (default: 2020)
   --secret value, -s value  github hook secret
   --quiet, -q               quiet operation (default: false)
   --verbose, --vv           print verbose (default: false)
   --help, -h                show help (default: false)
   --version, -v             print the version (default: false)
翻譯:
GLOBAL OPTIONS:
   --bash value, -b value    Execute the script path. eg: /home/hook.sh 自定義指令碼
   --port value, -p value    http port (default: 2020) 自定義埠,預設6666
   --secret value, -s value  github hook secret 自定義密碼, 不允許為空
   --verbose, --vv           print verbose (default: false) 列印更多詳細資訊
   --quiet, -q               quiet operation (default: false) 安靜模式,預設關閉. -q 開啟,不輸出任何資訊
   --help, -h                show help (default: false) 
   --version, -v             print the version (default: false)

 上面介紹幾本引數使用。好了,言歸正傳:

部署指令碼編寫,該 shell 指令碼的主要目的是從 github 拉取程式碼,指令碼內容很簡單,只做了目錄的簡要判斷,

程式碼目錄存在則更新,不存在則克隆倉庫,工作目錄和倉庫名稱、地址請換成大家自己的。

cd ~/  
mkdir sh 
vim webhook.sh

webhook.sh:

#!/bin/bash

cd /www/wwwroot/Golang/src

if [ ! -d "easy-gin" ]; then
  git clone https://github.com/fantasylxh/easy-gin
fi

cd easy-gin
git pull

配置github webhook

  • 填寫你伺服器的地址, http://ip:2020/web-hook
  • 設定的密碼必須與伺服器執行github-webhook -s設定的密碼一致.

 

 

啟動本地的sh指令碼:
github-webhook -b ~/sh/webhook.sh -s webhook123 >> ~/logs/webhook.log 2>&1 &

 

確認githup webhook連線是否正常:

測試webhook是否生效

git push後, 就可以看到github推送的資訊,比如本地我新增push一個檔案:

 執行Commit->push 之後,我們再看伺服器程式碼是否自動更新:

 

到此:webhook 通訊正常。 sh指令碼沒有驗證當前分支,只做了簡單的pull,可以帶上-f 強制更新,有興趣的博友可以完善下sh。

歡迎拍磚留言。

相關文章