本文主要目的是使用go语言实现github webhook的接收处理,对下文提及的go语言、github、webhook、hexo博客框架不做过多介绍,如果想要学习GO语言使用,想要了解什么是github以及gwebhook, 想要使用hexo框架快速搭建博客系统的可自行百度搜索学习。

1、背景

此前使用hexo框架搭建了一套博客系统,博客系统是放在群晖的docker中的,一般写完文章会push到VPS的git仓库中,再由nginx展示静态页。 今天心血来潮,将代码push到github的仓库里,然后使用github pages来展示页面,但vps 就接收不到了,虽然hexo框架支持一键部署到GitHub Pages,但正好最近在学习go语言,并且想了解一下Github webhook,所以使用go语言实现Github webhook接收处理。

2、解决思路

通过GO语言开发一个webhook接收处理的web服务,并部署在VPS上,该web服务用于接收github的webhook请求。当你将本地代码 push到github之后,github通过webhook请求VPS上部署的服务地址,发送一个push状态,VPS上的web服务接收请求并验证通过后自动pull github上的代码至nginx的根目录,从而实现VPS和github代码的同步更新。

3、实现代码

废话不多说,直接看代码实现。

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

注1、 上述代码exec.Command("/bin/sh","-c","cd /www && git reset --hard master && git pull")中的/www目录是 nginx 的root目录,我本地的静态页是直接pull到www的,所以该路径下存在.git文件,但是.git文件不应支持对外访问,因此nginx中需要屏蔽对.git的访问。

注2、上述代码的编写参考了:https://github.com/moonagic/GoWebhook。

最后,在github的webhook中的payload url指定VPS上服务对应地址。

打开网易新闻 查看精彩图片