0%

使用 webhook 自动更新博客

因为实在受不了 Coding Page 的速度,腾讯云的 CDN 感觉也很不好用,将自己的博客挂在了自己的服务器上。但是每次在写完之后都需要到服务器上执行 git pull过于麻烦,所以使用了 GitHub 上面的一个开源项目 webhook当然 webhook 的作用不仅仅是自动更新部署博客啊,啥都能干 O__O …

Webhook

对于 webhook 来说,可以自己写一个脚本来接受信息,思路很简单,运行一个 HTTP Server,监听服务器的某个端口,如果有消息传递过来,那么就运行事先写好的脚本,来完成 webhook 的功能即可。
webhook.png

但是为了方便使用和维护,还是选择了开源的项目

什么是 webhook?

webhook 的目标只是做他应该做的事

  1. 接受 request
  2. 解析 HTTP 首部,负载内容和请求变量
  3. 检测是否满足钩子的特定条件
  4. 最后,通过命令行参数或环境变量将指定的参数传递给指定的命令。

其他所有的事情都是 命令作者 的责任

如何使用

我的博客是使用 NGINX 挂在服务器上的,所以以下的内容都需要在服务器上执行

安装 webhook

首先安装 Golang 环境,然后安装 webhook
$ go get github.com/adnanh/webhook
将 Golang 的执行目录加入到 ~/.bash_profile
在文件的最后一行加入 export PATH="/home/ubuntu/go/bin:$PATH"
然后执行 $ source ~/.bash_profile

配置 webhook

下一步是定义您希望 webhook 提供的一些钩子,新建一个 hook.json 文件
该文件将包含 webhook 将提供的一系列钩子。检查 Hook 定义页面 以查看钩子可以包含的属性的详细描述以及如何使用它们。

定义和部署

下面的内容在 ~/notes-hooks 文件夹下执行
让我们定义一个名为 redeploy-webhook 的简单钩子,新建一个 redeploy.sh 文件,确保你的 bash 脚本在顶部有 #!/bin/sh

1
2
#!/bin/sh
git pull

写完之后注意需要给文件增加执行权限
$ chmod a+x redeploy.sh
然后新建一个 hooks.json 文件,看代码就可以知道意思了

1
2
3
4
5
6
7
[
{
"id": "redeploy-blog",
"execute-command": "/home/ubuntu/notes-hooks/redeploy.sh",
"command-working-directory": "/home/ubuntu/blog.cugxuan.cn"
}
]

这个 hooks.json 的作用表示的是监听的 URL 为 http://yoursite.com:9000/hooks/redeploy.sh
然后执行命令部署即可

1
2
3
4
# 前台运行的方法
$ webhook -hooks hooks.json -verbose
# 守护进程简单运行
$ nohup webhook -hooks hooks.json -verbose &

然后将 http://yoursite.com:9000/hooks/redeploy.sh 填到你的 GitHub 对应项目 setting → webhook 中即可

测试

写好博客然后 push,GitHub 收到你的更新之后就会触发 webhook 发送到服务器的监听位置,然后服务器完成更新部署
同时你可以在 GitHub 的 webhook 页面中看到发送的情况,还可以点击 Redeliver 重新测试
webhook-redeliver

如果对您有帮助,请我喝杯咖啡?