最近機緣巧合的購置了域名和服務器,不用實在是浪費,再加上一直沒有屬於本身的我的網站,因此打算用hexo在服務器上玩一下,這樣也就不用再糾結用Github pages仍是Gitee pages了。固然,今天的主題並非博客搭建,而是如何利用Github的鉤子,將博客代碼部署到服務器上。linux
畢竟Github的鉤子已經歷史悠久了,網上有不少開源項目能夠拿來用,因此我並無造輪子,而是去找了5K star的開源Go項目webhook
,這個工具的做用是接收Github倉庫的變更通知,而後調用你配置好的shell腳本,腳本能夠寫上代碼拉取的命令或是編譯的操做等,具體根據我的需求而定。簡而言之,它只起着拉通Github與你服務器的做用。git
由於webhook是Go語言開發的,因此要先安裝Go語言。github
yum install -y golang
複製代碼
而後就能夠用go命令安裝webhook了。golang
go get github.com/adnanh/webhook
複製代碼
命令安裝位置能夠經過go env
查看,GOPATH就是命令安裝路徑,好比個人命令就安裝在/root/go/bin/webhook。web
go env
...
GOOS="linux"
GOPATH="/root/go"
...
複製代碼
在編寫腳本以前確保服務器有權限拉取github代碼,若是已經作了配置可跳過本節去看部署腳本編寫。ssh key是代碼託管平臺(github、gitee、coding、gitlab等)鑑別你是否有權拉取代碼的身份標識,生成只需一行命令和一路回車就好了。shell
ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:M6sCf/J/hOu3zLxMkFUVmv3iWIa30CfbxiWqmWCt1YE root@iZwz96y36tk2ecnykzituxZ
The key's randomart image is:
+---[RSA 2048]----+
| ..o. |
| . o |
| . o |
| . o . |
| E S. . |
| . . ..Oo .. |
| oo o ==Boo . |
| .++.+o#== . |
| .=*+=+@o |
+----[SHA256]-----+
複製代碼
生成後可經過cat ~/.ssh/id_rsa.pub
命令查看,最後將key加入github便可,加法再也不贅述,請自行谷歌。json
cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQHBAAABAQCv7LGVJUFdcLL+HZyRFTQIQCdre61Gch76lDVpmWSX9BGGRU3iQS7EU5qApFn1VSvt+yf4rMt2LEkuxGCm1wIyBKZ6LYDViZBeTAfx4BcM1mcpxOX6I/+r07mQ4llTz+poQB1Zp9Y60uk0tbGOVWlCoDBEvf9qeEnQ0qEczEkv7wcawV6pVhlXjFKZgq0EOQbCYoWMvPUl+dwDbTcl/h+7At1nlgfF7IuRHlKf18qvgnTRT2wpiuz4pWdoAi8LcY1JiR1z5OB0oCJ2euhyDND39G2NxZRS1FIVdgCEvioHtdoHOSoWBlcSj0fLFSnscBfRBrCd7yhOP7fFKfrowHMj root@iZwz96y36tk2ecnykzituxZ
複製代碼
該shell腳本的主要目的是從github拉取代碼,腳本內容很簡單,只作了目錄的簡要判斷,代碼目錄存在則更新,不存在則克隆倉庫,工做目錄和倉庫名稱、地址請換成本身的。bash
#!/bin/bash
cd /home/www/website
if [ ! -d "go-home" ]; then
git clone https://github.com/pingyeaa/go-home.git
fi
cd go-home
git pull
複製代碼
編寫配置文件hooks.json,格式以下。服務器
[
{
"id": "deploy-webhook",
"execute-command": "deploy.sh",
"command-working-directory": "/home"
}
]
複製代碼
完成後經過webhook命令啓動,能夠看到id爲deploy-webhook的配置已經加載了,咱們須要注意的是監聽的端口和路徑,等下要用到。hexo
/root/go/bin/webhook -hooks hooks.json -verbose
[webhook] 2020/04/22 15:18:22 version 2.6.11 starting
[webhook] 2020/04/22 15:18:22 setting up os signal watcher
[webhook] 2020/04/22 15:18:22 attempting to load hooks from hooks.json
[webhook] 2020/04/22 15:18:22 found 1 hook(s) in file
[webhook] 2020/04/22 15:18:22 loaded: deploy-webhook
[webhook] 2020/04/22 15:18:22 serving hooks on http://0.0.0.0:9000/hooks/{id}
[webhook] 2020/04/22 15:18:22 os signal watcher ready
複製代碼
http://0.0.0.0:9000/hooks/{id}
複製代碼
如今服務器已經啓動了webhook程序監聽9000端口,接下來僅須要告訴Github這個地址和端口就行了。
打開倉庫設置頁,添加webhook。
配置webhooks,Payload URL就是要通知的地址,把剛纔打印出的端口和路徑填上便可,其餘默認。
如今能夠提交代碼測試了,若是推送失敗Github中會有錯誤提示,一樣的,成功不只在Github中能看到,服務器的打印日誌也有記錄。
我是平也,這有一個專一Gopher技術成長的開源項目「go home」
感謝你們的觀看,若是以爲文章對你有所幫助,歡迎關注公衆號「平也」,聚焦Go語言與技術原理。