我已经写了三篇关于如何使用 CI 持续构建 Hexo 的文章了,现在我将博客迁移到 GitHub 上托管,所以就需要使用 Travis CI 完成持续构建了。
相关阅读
建立 Repo
根据《随时随地 Hexo——我是如何使用 Hexo 的》一文,你应该使用 Git 管理你的 Hexo 工程文件。
新建一个分支 raw
,用来存放你的 Hexo 工程文件。将 raw
分支 push 到 GitHub 上。
如果你不想使用 SSH 的方式完成 Hexo 的 Deploy 的话,你可以使用——
GitHub Personal Access Token
在 GitHub 上点击页面右上角你的头像,进入 Settings
。
在左侧菜单的最下面、Developer Settings
中最后一项就是 Personal Access Token
。
点击 Generate new token
。GitHub 会让你输入密码,因为这是一个危险的操作。
你需要给 Token 取一个名字,建议使用一个容易辨别的名字。权限勾选 repo
的全部权限,即可生成一个新的 Token。
确定生成后,Token 将会显示在页面上,强烈建议你将其复制并保存好,同时避免泄露。遗忘 Token 后不能找回,只能重新生成。
配置 Travis CI
打开 Travis CI 并用 GitHub 帐号登陆完成授权,同步一下你 GitHub 帐号下的 repo 到 Travis CI,找到你博客的 repo,把左侧的开关打开。
找到已经启用自动构建的 repo,并在右侧找到设置按钮,有两处需要设置。首先需要启用 Build only if .travis.yml is present
选项,以避免用于 deploy 的分支被构建和、陷入构建循环的问题;在下方的环境变量设置处,我们需要设置几组环境变量,并注意保持 Display value in build log
处于禁用状态(默认为禁用),以免构建日志泄露重要信息。
1 | GitHubKEY = 上文生成的GitHub Personal Access Token |
定义构建流程
Travis CI 使用 repo 根目录下的 .travis.yml
来定义构建流程。
有关于 Travis CI 配置的详细解释可以查阅文档,下面是我使用的 .travis.yml
:
1 | language: node_js |
其中,部署生成的静态页面我使用了一个 deploy.sh
。接下来我就来介绍一下这个脚本是如何替代 hexo d
和 hexo-deployer-git
的。
1 | cd ./public # Hexo 生成的目录默认在 public 下 |
分支保护
为了防止你不小心将 Hexo 生成的静态整站覆盖了存放工程文件的分支,你需要对存放工程文件的分支开启写保护。
进入 Repo 的 Settings
,在 Branches
选项卡中 Protected Branches
选中存放你的 Hexo 工程文件的分支,只勾选第一个勾 Protect this branch
即可。点击 Save Changes
保存。
因为在 Travis CI 构建时,是使用
git push --quiet --force
完成 deploy 的,所以对 Hexo 工程文件所在分支进行写保护(即禁止 Force Push)可以有效保护你的工程文件。
加密 Personal Access Token
Travis CI 的环境变量相对可靠。但 GitHub Personal Access Token 权限太大,不能轻易暴露出去。所以如果你对 Travis CI 不太放心,那么可以用 Travis 命令行工具对其进行加密。
在本地配置好 Ruby 环境后,执行
1 | gem install travis |
安装 Travis 命令行工具并登陆。
1 | travis encrypt 'GitHubKEY=< 这里填入你生成的 Token >' --add |
上面命令会在 .travis.yml
中添加如下内容:
1 | env: |
上面的一长串字符串就是加密后的环境变量。之后,在 Travis 执行脚本时,就可以直接使用该环境变量了。由于已经在 .travis.yml
里完成 env
的定义,你就不需要在 Travis CI 后台配置 GitHubKEY
变量了。