0%

折腾之路 | 使用自建Git/CI实现静态页面自动部署

其实这个工作很久之前就完成了,最近才决定以文章的形式写出来

现在手里有两台服务器,曾经存放静态页面的服务和管理静态页面的服务在同一台服务器上。最近打算将其分开部署,所以就有了这篇文章

1. 流程变化

曾经由管理程序直接生成静态页面即可,对应Python&Hexo的代码就是:

1
status = os.system('cd ' + path + ' && ' + 'hexo generate')

新版方案则由后台管理程序先生成静态页面,然后将静态页面推送至Git服务器。在Git中设置Pipeline,自动向静态页面服务器推送文件。对应Python&Hexo的代码是:

1
2
3
4
5
6
7
8
9
10
11
# hexo g
result = os.popen('cd ' + path + ' && ' + 'hexo generate')
res = result.read()
for line in res.splitlines():
msg += line + "\n"

# git push
result = os.popen('cd ' + path + '/public && git add . && git commit -m "' + localtime + '" && git push')
res = result.read()
for line in res.splitlines():
msg += line + "\n"

2. CI设置

这里使用了私有部署的Drone作为CI工具,其方案是直接登录目标机器,git pull下来最新的页面数据即可。

这里有一个前提,我的静态资源都是由单独服务管理的,Git只负责管理最新的HTML。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
kind: pipeline
type: docker
name: master
steps:
- name: update
image: appleboy/drone-ssh
settings:
host: *
port: *
script:
- cd /blog/public
- git pull
trigger:
branch:
- master