menu
使用 DaoCloud 让 Hexo 持续集成

用 Hexo 搭建好博客,使用起来算方便,而且静态页面使用起来很方便,但是每次还要在安装了 Hexo 环境的机器上才能写文章和发布。能不能在任何地方只要新增或修改了 post 就自动生成并部署 hexo 呢?

实现思路

  • 用 CODING 开源社区对 Hexo 项目的源码进行管理(master 分支,要配置好 Hexo 部署信息)
  • 在 Daocloud 上进行 Hexo 环境的构建
  • Daocloud 通过持续集成功能自动生成静态页面
  • 通过 FtpSync 插件上传到我的虚拟空间

0000029.jpg

需要的东西

  • Hexo——静态页面生成器
  • CODING.NET——中国版 Github,可以拥有免费无限私有项目。
  • Daocloud——中国版 Docker hub,而且还能持续集成。

开始配置

首先自然是根据 Hexo 的官方文档对 Hexo 进行基本的配置。然后是创建一个 私有仓库 把 Hexo 文件夹 push 到你建好的私有仓库中。

通过 master 构建 Hexo 基础运行环境镜像

国内貌似也没找到什么合适的、支持 Coding 的 CI 平台,最后我找到了 Daocloud。Daocloud 可以根据 dockerfile 自动构建 Docker 私有镜像并同时进行持续集成的能力。所以可以把 Hexo 及其运行环境(node.js)打包成一个镜像。

  1. 编写 DockerFile。
#Dockerfile
FROM node:slim
MAINTAINER 你的用户名 你的邮箱

# 安装 git、ssh 等基本工具
RUN apt-get update && apt-get install -y git ssh-client ca-certificates --no-install-recommends && rm -r /var/lib/apt/lists/*
# 设置时区,不知道为什么?
RUN echo "Asia/Shanghai" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata
# 只安装 Hexo 命令行工具,其他依赖项根据项目 package.json 在持续集成过程中安装
RUN npm install hexo-cli -g
EXPOSE 4000
  1. 在 Daocloud 的控制面板内的代码构建选项卡内,选择“创建新项目”
    • 输入你的应用名
    • 设置代码源的地方绑定你的 Coding 或 Github,并绑定你建立好的 Repository。
    • 开启持续集成
    • 执行环境设在国外(The GirlFriend Wall 越来越高了,有时连 npm 都执行不了)

0000030.png

  • 镜像选择发布在“镜像仓库”中(这个镜像仓库是私有的)

通过 DaoCloud.yml 定义流程

#Daocloud.yml
image: daocloud.io/< 你的用户名 >/< 你的应用名 >:latest  #使用已经在上一步创建好的 Hexo 基础环境镜像(并不包括博客项目源码)
install:
 - npm install
before_script:
script:
 - hexo clean
 - hexo g
 - hexo d

yml 当中有一段 before_script,这个是用户自定义脚本。如果说你是在用 Github
或者 Coding 的 Pages 服务,需要把生成的静态页面 push 到你的 Repository 中,你就需要用 SSH 使 Daocloud 和 Repository 连接。配置 SSH 的具体用法见文章最后附录。

在 install 过程中才进行了 npm install,并没有在镜像构建时进行依赖项安装,这是因为依赖项安装过程根据不同用户的 Hexo 的配置和安装的功能不同而不同(package.json中记录的不仅仅是 Hexo 依赖项,还有用户装了的插件),并没有通用性,而且本身它就属于 build 过程,尽管花费时间稍长(平均耗时 90 秒),但是这样更科学。

接下来是对 Daocloud 进行配置。

  • 在设置选项卡中设置用 daocloud.yml 定义流程。
  • 镜像构建中两个勾都选上。

0000032.png

  • 触发规则按照如图所示的定义。

0000031.png

大功告成

之后写文章发布就是使用 git commit 而不是 hexo ghexo d了。只要提交以后,持续集成平台就会自动生成静态网页并发布。

附录

关于 daocloud.yml

Daocloud 如今已经开始用 daocloud YAML 2.0 定义流程了(1.0 版本的 YAML 于 9 月份停用了), 然而本篇博客中的依然是 YAML 1.0,所以请自行按照网页提示进行 YAML 升级。

0000033.png

HexoAutoBuildScript 项目

本文提到的有关的 dockerfile 和 daocloud.yml(包括 1.0 和 2.0)开源在 Github 上,并包括更加详细的使用教程

本文作者:neoFelhz
本文采用 CC BY-NC-SA 3.0 Unported 协议进行许可,阅读 相关说明
本文链接:https://blog.nfz.moe/archives/hexo-auto-deploy-with-daocloud.html