Hexo自动发布工程
前言
去年开始开了个仓库记录自己的每天学习的目标和成果,以此来进行自我督促。一年多过去,虽然还是由于各种原因中断了很多次,但是勉强还算把这个行为坚持了下来。现在也已经产生了不少记录的数据,于是想搞个前端页面用来浏览记录,而博客的时间轴归档很适合用来做这项工作。
单纯地把日志的文件放到hexo工程里生成发布,确实用不了几步操作,但是这将是一个会长期反复执行的操作,久了总会令人烦躁。俗话说,懒是人类进步最大的动力,构想中,我应该只需要每天写好记录,丢到仓库里,工具就会利利索索地把它展示到页面上。这种一般直接用git的钩子之类的就能实现,但是我想顺便对文章内容做些处理。比如日志的仓库跟博客结构不太一样,一些引用还有图的路径需要做变换等等。于是就有了这篇文章记录的东西——hexo文章的自动发布。
主要轮子
关键词:轻量。在硬件资源有限的情况下,第一次体会到Java这个鬼东西到底有多吃性能…原计划使用Jenkins做CI组件,结果跑几个任务直接OOM,1G小鸡表示承受不起
部署过程
基础环境
- 安装
python,node.js,docker
用各系统的包管理工具拉取即可,以centOS为例
1 | |
- 用
docker部署Gogs、Drone CI
Gogs
Gogs可以手动安装,不过省事点可以直接docker拉配置好的镜像
1 | |
10022,10080为本机映射端口,可以按需设置。Gogs容器的web端口为3000,访问服务器对应的映射端口即可。
Drone CI
drone是直接用docker镜像的形式发布的,直接拉取部署。需要分别配置server和runner。
注意,如果用不同的drone版本,参数配置等会有所不同
1 | |
drone具体用法这里不详述,需要注意的是安装runner的类型必须跟.drone.yml里配置的运行类型对应,这里官方文档没有详细指出,比较坑。
之后从docker启动drone,参数详见文档
drone server
1
2
3
4
5
6
7
8
9
10
11
12
13docker run \
--env=DRONE_GOGS_SERVER=本机ip:gogs web端口 \
--env=DRONE_RPC_SECRET=密钥 \
--env=DRONE_SERVER_HOST=本机ip:drone本机端口 \
--env=DRONE_GIT_ALWAYS_AUTH=true \
--env=DRONE_SERVER_PROTO=http \
--env=DRONE_USER_CREATE=username:用户名,admin:true \
--volume=/var/lib/drone:/data \
--publish=drone本机端口:80 \
--restart=always \
--detach=true \
--name=drone \
drone/drone:1drone runner
1
2
3
4
5
6
7
8
9
10
11
12docker run \
--env=DRONE_RPC_PROTO=http \
--env=DRONE_RPC_HOST=本机ip:drone本机端口 \
--env=DRONE_RPC_SECRET=密钥 \
--env=DRONE_UI_USERNAME=droneUI用户 \
--env=DRONE_UI_PASSWORD=droneUI用户密码 \
--volume=/var/run/docker.sock:/var/run/docker.sock \
--publish=runner本机端口:3000 \
--restart always \
--name runner \
--detach=true \
drone/drone-runner-docker:1
server与runner的RPC密钥需一致;droneUI用户名和密码可以随意填写,docker runner似乎不是必需的。
部署完成后可使用Gogs的用户登录drone,需要管理员账户才可以显示所有的仓库设置项
仓库部署
项目一共分三个,hexo工程、日志仓库和迁移处理工程,全部存放在Gogs中。我需要在日志仓库和迁移处理工程发生提交时触发迁移处理工程,迁移处理工程处理结束或hexo工程发生修改时触发hexo工程来更新页面,由此可以开始进行drone配置。
迁移处理工程处理结束触发hexo工程的操作drone原生不支持,我这里使用了downstream插件来解决,各工程.drone.yml如下
hexo工程
1 | |
日志仓库
1 | |
迁移处理工程
1 | |
这里有调用hexo的操作,需要把存放nodejs相关可执行程序的目录挂载到drone的容器上。
实测更新运转正常,上传的日志经过处理最后会发布到hexo博客页面上。机器上所有任务加起来一共使用了不到500M RAM,小而美。