使用 Travis CI 自动更新博客
Travis CI 自动检测代码变化,拉取,编译博客并部署到 GitHub Pages
写好博客之后,部署总会占去一段时间:编译、部署、推送和检查。手动部署多了也就烦了,一则容易出错, 比如把 master 分支用 gh-pages 分支覆盖了,二则劳动是重复的,重复的劳动就应该自动化去解决。
最早的想法
使用 GitHub Webhooks 实现自动部署,这就需要有一台服务器,在服务器上启动服务接受 Github 的 回调,然后拉取代码,编译,将编译后的代码要么部署在同一台服务器上,要么推送到代码 gh-pages 分 支上。前者额外需要编写服务,配置博客 Nginx,可能还需要配置 HTTPS,以及对服务器进行加固,总归 就是需要额外的更多东西来支持。所以还是觉得用已经存在的线上自动化服务方便一些(其实就是懒)。
Travis CI
持续集成(Continuous Integration,CI)的 SaaS 服务,好处不言而喻。
配置 Travis
gem install travis
travis login
language: node_js
node_js:
- 6.9.0
install:
- git submodule update --init
- npm install hexo-cli -g
- npm install
script:
- hexo clean
- hexo generate --deploy --quiet
branches:
only:
- master
cache:
directories:
- node_modules
notifications:
email:
recipients:
- qwh005007@gmail.com
on_success: change
on_failure: always
使用 Travis 自动部署
ERROR Deployer not found: git
npm install hexo-deployer-git --save
配置认证
往 Github 仓库中提交代码是需要认证的,不管是用用户密码,Access Token还是SSH key。一种方法是
直接将认证写在 .config.yml
中,不是说不行,是太年轻。好在 Travis CI 不仅支持加密文件,
也支持加密 Keys,这就为认证这一块
扫清了道路,我决定使用 OAuth 认证 Git 来提交代码到仓库中。
操作步骤:
-
生成 Github Personal Access Token;
-
使用 Travis CI 命令行加密 Personal Access Token;
travis encrypt GH_TOKEN=<token> --add
-
在
.travis.yml
中添加配置before_install: - git config --global push.default matching - git config --global user.name "qiwihui via Travis CI" - git config --global user.email "qwh005007@gmail.com" - sed -i'' "/^ *repo/s~github\.com~${GH_TOKEN}@github.com~" _config.yml
env: global: - secure: IYXTVHItgbEn...
在 Travsi CI 中配置项目
- Publicizing or hiding organization membership
自定义域名
- qiwihui.github.io/qiwihui/ => blog.qiwihui.com
- Enforce https
胜利完成!
参考
- 使用 Travis CI 自动更新 GitHub Pages
- Hexo 自动部署到 Github
- Easier builds and deployments using Git over HTTPS and OAuth
- Publicizing or hiding organization membership