Webhooks
# 前言
最近在写静态博客,每次在本地写完,push到GitHub上,然后还得去云主机上pull下来,比较繁琐。
# 思考
心里揣测,有没有一种机制,当我push到仓库后,云主机自动去pull下来。(当然,定时一分钟去pull一次当然也能实现,不过那样也太不优雅了)
# 发现
发现了一个叫 Webhooks 的功能。
Webhooks 是代码托管平台提供的一个功能,对于任意一个项目,可以设置一个URL,同时选择一些事件,当触发了这些事件时,代码托管平台会自动请求该URL,并带上一些必要的参数。
简单点说,Webhooks 就是一个项目的钩子函数,当你执行一些事件时,会自动调用这个钩子函数,事件就是 push、pull request、frok 等等这些操作。
代码托管平台有很多,常见的第三方的 GitHub、码云、Coding,或者自己搭建的 GitLab、Gogs等都提供了 Webhooks 功能。
# 实操
在GitHub上添加并设置Webhooks
然后在云服务器上开一个web服务器,用来处理GitHub发过来的请求,我这边就是简单的,收到消息后进到工作目录,执行 git pull 。
部分代码如下:
def POST(self):
try:
webData = web.data()
#print("111 Handle Post webdata is:\n", webData)
#打印消息体日志
#print(parse.unquote(str(webData, 'utf-8')))
cmd = 'cd /home/centli/hugoblog/content/post && git pull && rsync -a images ../../static/ && rsync -a files ../../static/'
with os.popen(cmd) as p:
r = p.read()
print(r)
# 结果
从此,当我在本地写完一篇博客推送到GitHub后,再也不用手动登录到云主机执行拉取了。只管推送就行了,然后静静的等待博客页面自动刷新。