使用 Travis 持续集成你的 Hexo 博客

之前一直用 hexo deploy 更新博客,然后用 git 将 hexo 的源文件托管到另一个分支或者仓库,虽然这样可以让你能够备份下来 hexo 的源文件,但是这样实在太麻烦了,需要运行两次命令,还要切换分支什么的,十分麻烦。

后来在网上找到了一个十分简单得方法,就是持续集成

原理

每次原文件仓库或者分支更新文件后,Travis 会把文件从 Github 上拉取下来,编译成静态文件后,然后直接 Push 到 master 的分支或者仓库,完成整个网页的更新。

配置流程

Travis 新建工程

首先登陆 Travis 的官网 https://www.travis-ci.org/,选择右上角的 Sign in with GitHub 登陆。

Travis官网

然后右上角个人头像,选择 Setting,Sync Account 同步 Github 上的 Repo 信息

选择 hexo 的仓库,也就是 xxxx.github.io,进行启用

选择 Github 登陆即可,然后选择 NEW PROJECT ,新建一个项目,选择 Github 上 Hexo 的原文件或者分支,我是选择的是 2 原文件和静态页面在同一个仓库的 2 个分支。

启用工程

获取 AccessToken

travis.yml 文件中需要几个参数,如果之前设置了环境变量,可以通过 ${xxxx} 来表示,比如仓库地址就是 ${GIT_URL},因为这个 travis.yml 直接保存到 Github 上面的,直接写密码肯定是不行的,所以可以使用有授权的 AccessToken 保存到里面。

可以点击这里,进入 Personal access tokens 页面,然后点击 Generate new token,获取一个新的 token,Token description 任意填写,下方的选项中全选 repo 即可。

将生成 token 保存起来,下面的流程会用到

配置 travis 环境变量

然后选择后面的 Setting 按钮,在 Environment Variables 栏下配置环境变量

填写完后保存,然后进入 Environment 设置,设置下面的环境变量,在之后配置.travis.yml 文件会用到。

环境变量名 环境变量值 示例
GIT_URL 仓库地址 github.com/fwfmiao/fwfmiao.github.io.git
GIT_USER_EMAIL Github 的用户邮箱 xxxx@xxx.com
GIT_USER_NAME Github 的用户名 fwfmiao
ACCESS_TOKEN ACCESS_TOKEN xxxxxxxxxxxxx
SOURCE_BRANCH 编译源代码 hexo
TARGET_BRANCH 编译后静态文件保存的分支 master

Environment Variables设置

我填写的情况如下,然后保存。

.travis.yml 配置

接下来是要把.travis.yml 配置到原文件放置的分支根目录下,主要目的是在更新原文件后,能够让 Travis 按照.travis.yml 里面写的内容,然后 push 到目标分支。

具体配置文件如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
language: node_js
node_js: stable

git:
depth: 5
quiet: true

branches:
only:
- hexo

install:
- npm install

cache:
directories:
- node_modules

script:
- hexo clean
- hexo generate

after_success:
- cd ./public
- git init
- git config user.name "${GIT_USER_NAME}"
- git config user.email "${GIT_USER_EMAIL}"
- git add .
- git commit -m "Update Static Site"
- git push --force --quiet "https://${ACCESS_TOKEN}@${GIT_URL}" ${TARGET_BRANCH}:${TARGET_BRANCH}

上面大概内容就是将 github 仓库的 hexo 分支拉取下来,编译成静态文件后,在 push 到目标 (master) 分支。由于 Travis 环境中是通过 Access Token 访问我们的仓库的,而 Hexo 自带的部署则在访问的过程中需要我们输入帐号密码,所以 Hexo g -d 的命令就不适合在这里使用。需要先编译成静态文件,然后直接把把 public 文件夹的静态文件 push 到目标分支。

使用流程

.travis.yml路径

将.travis.yml 放到分支根路径,push 上去就可以了。

这时候就可以看到 Travis 自动运行.travis.yml 文件,并进行 CONSOLE 的打印。

CONSOLE的打印

以后每次只需要对 HEXO 原代码那个分支进行更新就可以了,他会自动编译成静态文件再发布,十分方便,我们还可以加上一个这个小徽章_(:з」∠)_信仰充值。

Build Status