利用Webhooks自动发布博客

前言

github中提供了Webhooks的能力,当github中仓库发生变更时,例如发生push事件等,触发通知功能,github会自动调用Webhooks配置的回调地址,进行主动通知。这是个非常有用的功能,springcloud config主动通知应用服务器,配置文件变更就是通过它实现的,今天介绍它的另外一种使用场景,就是实现博客的自动发布。当有新的提交时,博客服务器能够自动的更新。

python服务

利用python编写接受push事件的服务器。在python脚本中调用shell脚本触发git相关操作,当然也可以直接使用python脚本调用git相关的命令实现。

blog_refresh_server.py

#!/usr/bin/python2.7
# -*- coding: utf-8 -*-

'''
描述:lpp`blog refresh事件处理服务
'''

__author__ = 'Pan Li'

import os

# 导入包
from flask import Flask
from flask import request

app = Flask(__name__)


# push事件通知处理器
@app.route('/refresh', methods=['GET', 'POST'])
def refreshBlog():
print("Refresh blog", request.data)
result = os.system("./deploy_blog.sh")
if result == 0:
return "Refresh blog success. result=" + str(result)
else:
return "Refresh blog failure. result=" + str(result)


if __name__ == '__main__':
app.run(host='0.0.0.0', port=2800, debug=False)

在linux服务器上安装依赖的模块Flask

pip install Flask

后台进程启动python服务

nohup ./blog_refresh_server.py &

防火墙放开2800端口,支持外网访问

iptables -I INPUT -p tcp --dport 2800 -j ACCEPT

shell脚本

shell脚本触发git操作,拉取更新的文件信息到nginx服务目录。

deploy_blog.sh

#!/bin/bash
## pull blog from github
echo 'begin deploy blog ...'
cd /home/lipanpan.github.io
git pull
sleep 1
echo 'deploy blog successful done...'
exit

配置Webhooks

image