什么是webhook
,它是一个很方便的功能,通常他会帮我们监控某一个event
,当某个事件触发的时候,会向预先设置的接口发起一个信息请求,如通过HTTP POST/PUT
的形式向一个接口发起请求。
这是一个很方便的功能,最近用它实现了grafana
上的channel
,原因也是其很方便,当它的告警信息触发,可以POST
一个信息到我们的告警接口,通过一些告警收敛,聚合规则之后,发送给对应的相关业务维护人员,也有一些服务启动脚本,如果是服务down
掉也会自动调用脚本重新启动服务。
这里我们也可以方便的用webhook
实现网站的自动部署,Hexo
自身就是一个纯静态的页面,而github
提供了webhook接口,可以监控到和仓库相关的事件发生。这里给出一个使用思路
使用xinetd
来监听某个端口,当收到http request
调用脚本进行一次git pull
,在github
配置webhook监听commit事件,当我们在本地写好文章,使用hexo g
生成public
目录。之后提交到github repository
,当commit
事件触发,向xineted
监听的端口发起请求,触发一次脚本执行
配置xinetd
需要提前保证xinetd
已经安装,在/etc/service
定义监听的端口
1 | [zhxfei@hk ~]$ grep '7996' /etc/services |
配置文件:/etc/xinetd.d/webhook-ci
1 | service webhook-ci |
webhook-ci.sh
就是在端口被请求的时候所调用的脚本,很简单就三行:
1 | !/bin/bash |
启动xineted
服务,查看是否监听在对应的端口上
注意
需要保证
xineted
配置文件中指定的用户有这个脚本的执行权限。需要在
github
上添加ssh公钥让你的Nginx
可以访问你的github
在这个栗子中:需要修改
nginx server
的root path
为/var/www/html/public
,public
是hexo
生成的页面所在的目录
之后在你的github
上配置webhook
就好了。

优化
这里只是实现了一个接口可以接受请求,但是GitHub webhook
那边还有很多规则我们没有遵循,比如我们没有回复这个,那么github
那边就会认为没有响应,会提示service timeout
,虽然这并不会影响我们的使用,但是足够不优雅。这就需要修改下xineted
调用的脚本了,如下
1 | !/bin/bash |
这时候查看更新的情况: