参考
使用 Travis CI 自动更新 GitHub Pages
How to publish to Github Pages from Travis CI?
一切为了自动化
关于 Github Pages 的自动化,我想可以分为三个阶段:农耕时代,半自动化时代,自动化时代。
来解释一下,农耕时代的操作是写好博客后,手工在命令行执行 hexo g
,然后手工将 public 目录下的静态文件复制到 Github Pages 项目中,再用 git 进行相应操作并 push 到 github。这一系列的操作虽然不出错,但是流程过于繁琐,特别是对于经常写博客的同学来说。
所谓自动化时代,常见的做法使用 hexo 自带的 hexo deploy
。在进行相应的配置之后, 每次写好博客,然后 hexo d
就可以进行部署了。然后这样依旧不够自动化,每次写好博客之后都需要手工 hexo g
,所以进入下一个阶段。
而自动化时代,便是全自动化,当写好博客后,并把博客源码 push 到 github 就会触发一系列的部署动作,无需手工部署。具体实操可以使用 Travis CI 或是 Jenkins 这样的自动化部署工具,最后我选择的是前者,原因是免费(逃
原理
具体流程
在 github 上生成 Personal access token 供 Travis 使用,详细步骤
注意: a. 在 Select scopes 时如果你的静态网页仓库是 public 的,需要勾选public_repo
;如果是 private 的,则需要勾选repo
(Full control of private repositories)。没有正确勾选的话,Travis 进行 push 时会出现 403 错误。wfy,Token 值要妥善保存。在 Travis 线上配置 github token 值或是 Travis 的 命令行工具本地加密 token。这里我推荐使用前者,原因是无需安装 ruby 和 travis 依赖,如果按照的后者方案的话,可以看看参考中的第一篇,有详细的步骤。
来看看线上配置 Token 的步骤:在 Travis 的仓库设置中(https://travis-ci.org/<me>/<myrepo>/settings
) 新建一个环境变量:GH_TOKEN=<token>
,同时确保 “Display value in build log” 是 “Off” 的。这样会确保 token 明文不会再 Travis 日志中出现,一旦别人得到了这个 token 就可以对你的仓库进行 push 操作了。博客源码根目录下配置自己的在
.travis.yml
文件,可以参考我的配置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
31
32
33language: node_js
node_js: stable
cache:
directories:
- node_modules
# 环境变量
env:
global:
- GH_REF: github.com/zerosrat/zerosrat.github.io.git
# 只检测 master 分支的 push
branches:
only:
- master
# build lifecycle start
before_install:
- npm i -g hexo-cli
install:
- npm i
script:
- hexo g
after_script:
- cd public
- git init
- git config user.name "zero_ai"
- git config user.email "zero.yu@hotmail.com"
- git add --all
- git commit -m "Update blog via travis"
- git push -f -q "https://${GH_TOKEN}@${GH_REF}" master:master
# build lifecycle end进行一次 push,上 Travis 看执行 log。