用 Hexo 搭建好博客,使用起来算方便,而且静态页面使用起来很方便,但是每次还要在安装了 Hexo 环境的机器上才能写文章和发布。能不能在任何地方只要新增或修改了 post 就自动生成并部署 hexo 呢?
实现思路
- 用 CODING 开源社区对 Hexo 项目的源码进行管理(master 分支,要配置好 Hexo 部署信息)
- 在 Daocloud 上进行 Hexo 环境的构建
- Daocloud 通过持续集成功能自动生成静态页面
- 通过 FtpSync 插件上传到我的虚拟空间
需要的东西
- Hexo——静态页面生成器
- CODING.NET——中国版 Github,可以拥有免费无限私有项目。
- Daocloud——中国版 Docker hub,而且还能持续集成。
开始配置
首先自然是根据Hexo的官方文档对Hexo进行基本的配置。然后是创建一个私有仓库把Hexo文件夹push到你建好的私有仓库中。
通过master
构建Hexo基础运行环境镜像
国内貌似也没找到什么合适的、支持Coding的CI平台,最后我找到了Daocloud。Daocloud可以根据dockerfile自动构建Docker私有镜像并同时进行持续集成的能力。所以可以把Hexo及其运行环境(node.js)打包成一个镜像。
- 编写DockerFile。
1 | #Dockerfile |
- 在Daocloud的控制面板内的代码构建选项卡内,选择“创建新项目”
- 输入你的应用名
- 设置代码源的地方绑定你的Coding或Github,并绑定你建立好的Repository。
- 开启持续集成
- 执行环境设在国外(The GirlFriend Wall越来越高了,有时连npm都执行不了)
- 镜像选择发布在“镜像仓库”中(这个镜像仓库是私有的)
通过 DaoCloud.yml 定义流程
1 | #Daocloud.yml |
yml当中有一段
before_script
,这个是用户自定义脚本。如果说你是在用Github
或者Coding的Pages服务,需要把生成的静态页面push到你的Repository中,你就需要用SSH使Daocloud和Repository连接。配置SSH的具体用法见文章最后附录。
在install过程中才进行了npm install,并没有在镜像构建时进行依赖项安装,这是因为依赖项安装过程根据不同用户的Hexo的配置和安装的功能不同而不同(
package.json
中记录的不仅仅是Hexo依赖项,还有用户装了的插件),并没有通用性,而且本身它就属于build过程,尽管花费时间稍长(平均耗时90秒),但是这样更科学。
接下来是对Daocloud进行配置。
- 在设置选项卡中设置用
daocloud.yml
定义流程。 - 镜像构建中两个勾都选上。
- 触发规则按照如图所示的定义。
大功告成
之后写文章发布就是使用git commit
而不是hexo g
和hexo d
了。只要提交以后,持续集成平台就会自动生成静态网页并发布。
附录
关于daocloud.yml
Daocloud如今已经开始用daocloud YAML 2.0定义流程了(1.0版本的YAML于9月份停用了),然而本篇博客中的依然是YAML 1.0,所以请自行按照网页提示进行YAML升级。
HexoAutoBuildScript项目
本文提到的有关的dockerfile和daocloud.yml(包括1.0和2.0)开源在Github上,并包括更加详细的使用教程