这两天从新捣鼓了一下 Hexo 博客, 用 Travis CI 作了自动部署。node
作的过程当中查看了不少资料,基本上都是用在 CI 中用 Git、Hexo deploy 作的部署,还要加密 ssh-key 什么的。我基于这作了一遍,对于 Travis CI 的文件加密等等,有了更深的理解。这中间的配置,我以为至关的麻烦。可是当我从新翻阅 Travis CI 的文档的时候,我发现其实 Travis CI 能够自动静态文件部署到 GitHub Pages。只须要很是简单的配置,就能够了。git
deploy:
provider: pages
skip_cleanup: true
github_token: $GITHUB_TOKEN # travis-ci.org 控制面板上设置
on:
branch: master复制代码
这是最基本的配置。github
skip_cleanup
的值必须为 true
否则会把你在构建时生成的文件给删除掉。hexo
on: branch: master
的意思是当 master 分支有变化时,才执行这个部署。更多条件设置请参考 Deployment 。ssh
GITHUB_TOKEN
的生成请参考 Creating a personal access token for the command line。 若是你的仓库是公开的,那么在给权限的时候只须要给 public_repo
, 若是你的仓库是私有的那就要给 repo
权限,尽可能给更少的权限。而后在控制台设置环境变量 GITHUB_TOKEN
值为刚才生成的 token。在添加环境变量的时候有个开关 Display value in build log 千万不要打开,否则别人就能够在 CI 的 log 里面看到你的 token 了,就能够对你的公开仓库进行任意修改。ide
接下来咱们就要对这个基本配置作个修改,添加更多的设置来符合咱们的需求。ui
local_dir
指的是是将要推送到 GitHub Pages 的目录,默认的值为当前目录。咱们都知道 hexo generate
生成的目录是 public
,因此咱们要将 local_dir
的值设置为 public
加密
repo
指的是 GitHub Pages 所在的代码仓库,默认值为当前仓库。spa
target_branch
指的是 GitHub Pages 所使用的分支,默认为 gh-pages
。code
这里有个问题,就是 Travis CI 使用 git push --force
来进行推送的,因此会清空历史,因此必定要保证你的 repo
和 target_branch
设置的正确。本来我是作了保留历史的配置的,改为这样用 Travis CI deploy 来作的话,就没有办法保留历史了。可是转念一想,我只要保留 blog 仓库的历史就好啦,这些只是生成的代码,因此我认为使用 Travis CI 这样的设置是合理的。
通常来讲添加这三个配置就能够了。更多配置请参考 GitHub Pages Deployment
下面是个人配置信息
language: node_js #指定环境为 Node.js
node_js:
- '7' #指定 Node.js 的版本为 7
before_install:
- export TZ='Asia/Shanghai' #设置时区 非必须
script:
- hexo generate #生成博客
deploy:
provider: pages
skip_cleanup: true
github_token: $GITHUB_TOKEN
local_dir: public
repo: zhangweijie-cn/zhangweijie-cn.github.io
target_branch: master
on:
branch: master复制代码
Travis CI 会自动帮咱们安装依赖,因此这些咱们都不须要考虑。
当咱们给 blog 所在仓库 master 分支推送文章之后,GitHub Pages 就会自动构建和部署了。