GitHub Pages 可以用来托管静态网站,而 Jekyll,Gitbook 等等程序都可以生成静态网站,那么如果使用 master 分之托管源码的话, gh-pages 分支就可以用来托管静态网站。而使用 Travis 就可以将每一次 master 分支的提交,自动编译静态站点之后提交到 gh-pages 分支。

既然要使用到 git 的推送,那么必然避不了需要验证,Travis 提供很多验证方式,这里有两种:

Encryption keys

加密 TOKEN,需要使用到 GitHub 提供的 Personal API tokens,Token 与 帐号密码 以及 SSH Keys 同样具有 Github 写入能力,因此只要使用 Travis CI 提供的加密工具来加密这个 Token 即可。

Travis CI 会使用一对密钥中的 Public Key 来加密提供的 TOKEN,然后得到的 secure token 可以安全地放在 .travis.yml 文件中,在 Build 的时候 Travis 会使用 Private Key 来解密这个 Secure Token 获取最初提供的 Github Personal Access Token,并使用该 TOKEN 来进行一系列操作。

操作具体步骤:

  1. 获取 GitHub Personal access tokens https://github.com/settings/tokens, Github 帐号 Settings 页面侧边栏最下面 Developer 中有 Personal access tokens。新建一个 token,只需要选择 repo 相关权限。创建完的 token 只会显示一次,保存好该 token 下面需要使用。
  2. 安装 travis 工具,需要提前安装好 Ruby 环境 gem install travis
  3. 使用 GitHub TOKEN 来登录 travis login --github <token>
  4. 生成 secure token travis encrypt GH_TOKEN=<token> ,使用 travis encrypt ... 命令会生成加密的字符串,把字符串添加到 .travis.yml 文件中

或者使用额外的参数 --add ... 比如 travis encrypt <token> --add deploy.github-token 可以自动添加到 .travis.yml 文件中,会自动在 deploy 下创建 github-token 来存放加密字符串。

更多的 travis 的使用可以 travis -h 来查看。

下面以 Gitbook 使用 Travis 自动编译部署到 GitHub Pages 为例,这里使用到了 Travis 的发布到 GitHub Pages 的功能

language: node_js

node_js:
  - "8"

before_install:
  - export TZ='Asia/Shanghai' # 更改时区

# 依赖安装
install:
  - npm install gitbook-cli -g
  # 安装 gitbook 插件
  - gitbook install

# 构建脚本
script:
    # 自定义输出目录 gitbook build src dest
    # 默认会输出到 _book 目录下
  - gitbook build .

# 分支白名单
branches:
  only:
    - master # 只对 master 分支进行构建

before-deploy:
- git config --local user.name "Ein Verne"
- git config --local user.email "[email protected]"

# GitHub Pages 部署
deploy:
  provider: pages
  skip_cleanup: true
  github_token:
    secure: <secure token>
  # 将下面的目录中内容推送到 gh-pages 分支
  local_dir: build
  fqdn: $CUSTOM_DOMAIN
  name: $GIT_NAME
  email: $GIT_EMAIL
  on:
    branch: master

大概原理就是如此,记住 skip_cleanup: true 这个一定要写上,否则 Travis 在 build 的时候会自动清理掉 repo 中编译生成的内容。

  • before_install 在安装之前,设置时区
  • install 安装依赖
  • script 执行真正的脚本
  • before_deploy 部署之前做的事情
  • deploy 部署发布内容

验证 travis 配置

本地使用命令

travis lint .travis.yml

实例使用可以参考这个例子

reference

  • https://www.jianshu.com/p/5f96c27baaa5