因为之前实在受不了 Coding Page
的速度(现在的 Coding Page 服务已经变成新版,使用腾讯云提供的服务,应该还行,不过不太想折腾了),几年前腾讯云的 CDN 感觉也很不好用,所以将自己的博客挂在了自己的服务器上。但是每次在写完之后都需要到服务器上执行 git pull
过于麻烦,所以使用了 GitHub 上面的开源项目 webhook,当然 webhook 的作用不仅仅是自动更新部署博客啊,啥都能干 O__O …
Webhook
对于 webhook 来说,可以自己写一个脚本来接受信息,思路很简单,运行一个 HTTP Server
,监听服务器的某个端口,如果有消息传递过来,那么就运行事先写好的脚本,来完成 webhook 的功能即可。
但是为了方便使用和维护,还是选择了开源的项目
什么是 webhook?
webhook 的目标只是做他应该做的事
- 接受 request
- 解析 HTTP 首部,负载内容和请求变量
- 检测是否满足钩子的特定条件
- 通过命令行参数或环境变量将指定的参数传递给指定的命令
其他所有的事情都是 命令作者
的责任
如何使用
我的博客是 hexo 构建,构建出来的结果都是静态文件,使用 Nginx 挂在服务器上的,以下的内容都需要在服务器上执行
安装 webhook
这里推荐三种安装方法,使用其中一种方法即可,github 下载速度可能很慢,推荐使用系统源安装的方式
法一:使用系统源的安装方式
如果是 Ubuntu 系统,可以直接使用下面的命令进行安装:
1 | $ sudo apt-get update |
法二:使用 github 下载
webhook 的 release 链接,找到对应的选项 webhook-linux-amd64.tar.gz
右键复制链接 ,当前写博客时的最新版本链接为 https://github.com/adnanh/webhook/releases/download/2.6.11/webhook-linux-amd64.tar.gz
具体操作如下:
1 | // 下载对应的软件 |
法三:Golang 环境下安装
首先安装 Golang 环境(这里略过),然后安装 webhook,这里注意需要已经设置了 GOPATH
1 | // 安装对应的工具 |
配置 webhook
下一步是定义您希望 webhook 提供的一些钩子,新建一个 hook.json
文件
该文件将包含 webhook 将提供的一系列钩子。检查 Hook 定义页面 以查看钩子可以包含的属性的详细描述以及如何使用它们。
定义和部署
下面的内容在 ~/notes-hooks
文件夹下执行
让我们定义一个名为 redeploy-webhook
的简单钩子,新建一个 redeploy.sh
文件,确保你的 bash 脚本在顶部有 #!/bin/sh
1 |
|
写完之后注意需要给文件增加执行权限$ chmod a+x redeploy.sh
然后新建一个 hooks.json
文件,看代码就可以知道意思了
1 | [ |
这个 hooks.json
文件中各项的作用一看便知,注意 id 和监听的 URL 对应,webhook 默认监听的端口是 9000,根据上面写的可知监听的 URL 为 http://yoursite.com:9000/hooks/redeploy-blog
,接下来执行命令部署即可
1 | # 前台运行的方法,可以方便测试 |
然后将 http://yoursite.com:9000/hooks/redeploy-blog
填到你的 GitHub 网站对应项目页面 Settings → Webhooks
中即可
测试
写好博客然后 push,GitHub 收到你的更新之后就会触发 webhook 发送到服务器的监听位置,然后服务器完成更新部署
同时你可以在 GitHub 的 webhook 页面中看到发送的情况,还可以点击 Redeliver 重新测试