最近机缘巧合的购置了域名和服务器,不必实在是糟蹋,再加上一向没有属于自己的个人网站,所以计划用hexo在服务器上玩一下,这样也就不必再纠结用Github pages还是Gitee pages了。当然,今天的主题并不是博客建立,而是如何使用Github的钩子,将博客代码部署到服务器上。

毕竟Gito i Z #hub的钩子现已历史悠久了,网上有许多开源项目能够拿来用,所以我并没有造轮{ c :子,而是去找了5K star的开源Go项目web+ , ! P { $ ? Y Mhook,这个工具的效果是接收Github库房的变化告诉,然后调用你装备好的shell脚本,脚本能够写上代码e n N拉取的指令或是编译的操作等,详细根据个i 8 m ] M | 4 k人需求而定。简而言之,它只起着拉通Github与你服务器的效果。

如何用Github钩子做自动部署

webhook工具装置

由于webhook是Go言语开发的,所X o 3 Q d以要先装置Go言语。

yum install -y golang

然后就, o R ! 9 # t O –能够用go指令装置webhook了。

go get github.com/adnanh/webhook

指令装置位置能够经过go env查看,G7 t h FOPATH便是指令@ ! T s : ` ( t C装置途径,比如我的指令就装置在/root/go/bin/webhook。

go env
...
GOOS="linux"
GOPATH="~ } Z E d 6 / }/root/go"
...

生成ssh key

在编写脚本之前确保服务器有权限拉取github代码,如果现已做了装备可 R P – X S H越过本节去看部署脚本编写。ssh key是代码保管渠道(github、gitee、coding、gitlabX @ G 7 w z等)鉴别你是否有权拉取代码的身份标识,生成只需一行指令和一路回车就行了。

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 passphraseU 6 T again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been savg t } ? O .ed 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( V X q ~ ==Boo .  |
|   .++.+o#== .   |
|    .=*+=+@o     |
+----[SHA256]-----+

生成后可经过cato c s X K = B 7 ~/.ssh/id_rsa.pub指令查看,最终将key参加github即可,加法不再赘述,请自行谷歌。

cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADw n U v e m &AQHBAAABAQCv7LGVJUFdcLL+HZyRFTQIQCdre61Gch76lDVpmWSX9BGGRU3iQS7EU5qApFn1VSvt+yf4rMt2LEkuxGCm1wIyBKZ6LYDViZV j [BeTAfx4BcM1mcpxOX6I/+r07mQ4llTz+poQB1Zp9Y60uk0tbGOVWlCoDBEvf9qeEnQ0qEczEkv, ,  9 + q7wcawV6pVhlXjFKZgq0EOQbCYoWMvPUl+dwDbTcl/h+7At1nlgfF{ z 9 F ^ 17IuRHlKf18qvgnTRT2wpiuz4pWdoAi8LcY1JiR1z5OB0oCJ2euhyDND39G2NxZRS1FIVdgCEvioHtdoHOSoWBlcSj0fLFSnscBfRBrCd7yhOP7fFKfrowHMj root@iZwz96y36tk2ecnykzituxZ

部署脚本编写

该shell脚本的主要意图是从github拉取代码,脚本内容很简单,只做了目录的简要判别,代码s y K &目录存在则更新,不存在则克隆库房,工作目录和库房名称、地址请换成自己的。

#!/b4 d  d | ^ j Ain/bash
cd /home/www/website
if3 6 c 4 % j [ ! -d "go-home6 / C" ]; the4 J W n
git cl{ h zone https://github.com/pingyeaa/go; 2 U L . X ]-home.git
fi
cd go-home
git pull

webhook装备与发动

编写装备文件hooks.json,格式如下。

[
{
[ e 3 k * g P"id": "dD r % E Keploy-webhook",
"execute-command": "deploy.sh",
"command-working-directory": "/home"
}
]
  • id:钩子的id,可自定义
  • e– K ] j `xecute-command:要执行的脚本名,便是方才编写的部署脚: 3 b
  • command-workiR ? Rng-directory:脚本地点目录

完成后经过webhook指令发动,能够看到id为deploy-webhook的装备现已加载了,我们需求注意的是监听的端口和途径,等下要用到。

/root/go/bin/webhook -hooks hooks.json -verbose
[webhook] 2020/04/B k t _ I c 222 15:18:22 version 2.6.11 starting
[webhook] 2020/04/22 15:18:22 setting up os signal watcher
[webhook] 2020/W ! G M M w L $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
[wk B M I I V Bebhook]~ F - B a $ 1 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:1] c t q C i8:22 os signal watcher ready
http://0.0.0.0:9000/hooks/{id}

Github Webhooks装备

现在服务器现已发动了webhoJ F | kok程序监听9000端口,c R ^ ) n | Y E接下来仅需求告诉Github这~ t h %个地址和端口就好了。

打开库房设置页,添加webhook。

如何用Github钩子做自动部署

装备webhooks,Z 1 # S ~ * c + $Payload URL便是要告诉的地址,把s m F _ $ U A T方才打印出的端口和途径填上即可,其他默认。

如何用Github钩子做自动部署

现在能够提交代码测试了,如果推送失利Github中会有过错提示,同样的,成功不仅在Github中能看到,服务器的打印日志也有记载。

如何用Github钩子做自动部署
如何用Github钩子做自动部署

我是平也,这有一个专注Gopher技能生长的开源项目「go home」


感谢我们的观看,如果A G * p P m s觉得文章对你有所帮助,欢迎重视大众号「平也」,聚集Go言语与技能原理。/ n : (

如何用Github钩子做自动部署