# 持续集成 Continuous Integration @SpencerWoo Finish

TIP

利用 Travis CI 将 Hexo 持续集成部署到 GitHub Pages. 👷

(当你觉得有必要提高部署效率时,才使用 CI。萌新可略过。)

# 什么是持续集成?

持续集成(英语:Continuous integration,缩写 CI)是一种软件工程流程,是将所有软件工程师对于软件的工作副本持续集成到共享主线(mainline)的一种举措。

简单来说,我们通过持续集成,能够简化 Hexo 发布博客的步骤,即:将清除缓存 hexo clean ,生成静态文件 hexo generate 和部署到 GitHub Pages hexo deploy 这些步骤通过持续集成工具来帮助我们自动执行。

这样我们在本地对博客文件进行修改、新增博文内容或者新增博客文章,只需要通过 git 推送到 GitHub 仓库之后,持续集成工具就可以帮助我们在线构建博客静态文件并直接部署到 GitHub Pages。这之后,我们发布博客内容就不需要本地三步走了。

👷 本章我们所利用的持续集成平台是 Travis CI.

# 注册 Travis CI 账号,绑定 GitHub 账户

首先,我们到 Travis CI 官网,用自己的 GitHub 账户直接关联登录,并允许 Travis CI 查看自己的公有仓库。

然后我们到 Travis CI 账户页面 开启我们的博客仓库。如图。

# 配置文件

# 配置本地和远程仓库

警告

由于 GitHub Pages 的限制,每个人的默认博客仓库 xxx.github.io 只允许将静态文件托管在仓库的 master 分支。

为了方便下面步骤的进行,我们进行这样的配置:

  • 备份博客源文件
  • 在本地仓库创建 hexo 分支
# 克隆项目到本地
git clone https://github.com/xxx/xxx.github.io.git
# 创建并切换到 hexo 分支
git checkout -b hexo
  • hexo 分支保存博客项目的源代码
    • hexo 分支下的文件除 .git 目录外全部删除
    • 将博客源码文件拷贝到该目录下,并提交 Commit 到 hexo 分支.
  • 将本地 hexo 分支内容提交到 GitHub 远程仓库
# 提交本地 hexo 分支到远程仓库的 hexo 分支
git push origin hexo:hexo

经过这样的配置,我们博客仓库项目文件应该是这样的:

  • hexo 分支保存博客项目的源代码
  • master 分支保持项目的静态文件(即 public 文件夹下的内容)

# 配置持续集成文件

.travis.yml 是 Travis CI 的部署配置文件,Travis CI 部署时会自动读取我们每次 Commit 中是否包含 .travis.yml ,有此文件才会开始部署。

# 创建 .travis.yml 配置文件

在博客项目源代码分支下( hexo 分支)创建文件 .travis.yml ,并添加如下内容:

language: node_js # 编译语言、环境

sudo: required # 需要管理员权限

dist: xenial # 指定 CI 系统版本为 Ubuntu16.04 LTS

node_js: stable #Node.js 版本

branches:
  only:
    - hexo # 只有hexo分支检出更改才触发CI

before_install: 
  - export TZ='Asia/Shanghai' #配置时区为东八区UTC+8
  - npm install hexo-cli # 安装 hexo
#  - sudo apt-get install libpng16-dev # 安装 libpng16-dev CI编译出现相关报错时请取消注释

install:
  - npm install # 安装依赖

script: # 执行脚本,清除缓存,生成静态文件
  - hexo clean
  - hexo generate

deploy:
  provider: pages
  skip_cleanup: true # 跳过清理
  local_dir: public # 需要推送到Github的静态文件目录 
  name: $GIT_NAME # 用户名变量
  email: $GIT_EMAIL # 用户邮箱变量
  github_token: $GITHUB_TOKEN # GitHub Token变量
  keep-history: true # 保持推送记录,以增量提交的方式
  target-branch: master # 推送的目标分支 local_dir->>master分支
  on:
    branch: hexo # 工作分支

警告

  • 其他文档可能提到了利用 hexo-deployer-git 进行部署,但是由于 Travis CI 本身支持直接部署到 GitHub Pages 的工具,因此无需另行安装 hexo-deployer-git 了;
  • 其他文档也可能提到在 .travis.yml 中加入如下内容,来缓存 node_modules 下的内容,从而加快编译速度。但是经过我的尝试, node_modules 经常会由于没有及时更新,在添加其他组件之后出现「博客生成静态文件步骤」失败的情况,因此建议不进行缓存处理。
cache:
  directories:
    - node_modules

# 在 Travis CI 中配置变量

在配置文件中我们使用了三个变量:

  • $GIT_NAMEgit 用户名
  • $GIT_EMAILgit 用户邮箱
  • $GITHUB_TOKEN :GitHub 通行证 (token) 字符串

其中前两项可以通过在本地终端中这样查看:

git config --global user.name
git config --global user.email

如下图所示:

最后一项 GitHub 通行证 (token) 我们在 GitHub 中进行申请:

  • 将生成的 Token 复制,保存(生成 Token 的页面只有一次机会看见,请保存妥当。)

在 Travis CI 仓库配置中,将三个变量填入设置(位于 Settings > Environment Variables 处并保存:

# 自动部署

经过以上步骤的配置,发布博客的命令就变更为:

# 切换到 hexo 分支
git checkout hexo

# 提交新博文
git add .
git commit -m "Publish new post."

# 推送到远程仓库
git push

这样,在每次我们将博客的源文件通过 git 推送到 GitHub 的 hexo 分支上后,Travis CI 就会自动检测并主动开始构建我们的博客静态文件,并自动部署到 GitHub Pages 中。

除了方便部署,我们同时还在 GitHub 上面成功开启了我们博客源代码的备份,一箭双雕。👷

关于评论

评论前请填好“昵称”、“邮箱”这两栏内容,否则不会收到回复,谢谢!