Hexo官方在文档中提到的部署文件方法只有同步到Gitpage、Heroku、OpenShift或者通过rsync、ftp同步到自己的服务器。

然而Windows下并没有rsync,之前为了用rsync同步文件只好使用Bash on Windows来用rsync。

如果只是为了用rsync就装了BOW实在是太浪费了,所以需要另一种方式来同步Hexo。

Hexo提供Git提交方式的插件。原本这个插件是用来同步到Git page的,但是我们也可以用Git方式push public文件夹内容到git仓库然后设置webhook向自己的服务器发送事件,服务器再pull下来就行了(虽然跟那插件没啥关系)。

环境准备工作

所以我们先来做准备:

  • 创建私有仓库
  • 添加服务器的ssh pub key到github或者gitlab中就可以使用ssh方式pull文件而不需用输入用户密码
  • 准备python监听hook脚本

添加ssh key到仓库

连接自己的服务器复制自己的公匙cat ~/.ssh/id_rsa.pub,如果没有的话使用ssh-keygen生成一个新的公匙。

cat展示的文件所有内容都复制到粘贴版,在gitlab的setting->SSH keys页面添加

添加完成后就如图上所示。再进入自己的服务器选择目标目录进行第一次git clone。

准备python脚本

# wehbhook.py
from flask import Flask
from flask import request
import os
app = Flask(__name__)

@app.route('/',methods=['GET','POST'])
def hello_world():
    if request.headers['X-Gitlab-Token']=='827621b28ab441a3e5b7ffe6bf60312761e72140':
        os.system("git pull")
    return 'pull'

if __name__ == '__main__':
    app.run(host='0.0.0.0',port=8027)

运行wehbhook.py脚本

设置Webhook

进入GitLab的博客仓库进入Settings页面选择Integrations选项,添加钩子,并设置X-Gitlab-Token

在页面底部可以对钩子进行测试

由于是顺序执行的代码,所以在执行pull命令时gitlab会提示超时,然而服务器上是正常进行pull操作的。后期可以稍微修改下代码。

再使用nohup python webhook.py &让脚本跑在后台就可以不用管他了