众所周知, github有免费的github page可供用户放置静态页面。呃,对于更新不那么频繁的用户来说, github page可远远比自己搭的服务器 简便得多,也不会因为自己忙于工作(懒)三个月没更新博客忘记续费服务器,导致网站宕机。 总的来说, 我用hugo来生成静态博客页面, 然后放在github page上。

那么现在需求来了, 因为我经常开坑写一些半成品, 这么半成品往往是不想被人看到的,所以我不想我的hugo程序放在github的public仓库里面, 但是这个程序也是一定要用github管理的,所以它得在private仓库里面。 我的需求是, 每当我完成一篇文章, 我把它的markdown版本push到github private仓库, 然后自动生成静态页面, push到我的github page仓库。 在这里, travisCI可以帮我的忙。

操作

简单地说,Travis CI可以说是一种触发器, 只要你的仓库根目录有.travis.yml 文件,然后你push commit到仓库时, 就会触发一些操作, 这些操作由.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
language: minimal
env:
  global:
    - USER="xuxiaoyuspallow"
    - EMAIL="xuxiaoyuspallow@gmail.com"
    - REPO="xuxiaoyuspallow.github.io"
    - DIRECTORY="public/"
    - GH_REPO="github.com/${USER}/${REPO}.git"
    - HUGO_VERSION="hugo_0.72.0_Linux-64bit.tar.gz"
branches:
  only:
  - master
after_success:
  - wget https://github.com/gohugoio/hugo/releases/download/v0.72.0/${HUGO_VERSION}
  - tar -zxvf ${HUGO_VERSION}
  - MESSAGE=$(git log --format=%B -n 1 $TRAVIS_COMMIT)
  - git clone https://${GH_REPO}
  - ./hugo -d xuxiaoyuspallow.github.io
  - cd ${REPO}
  - git remote
  - git config user.email ${EMAIL}
  - git config user.name ${USER}
  - git add .
  - git commit -m "${MESSAGE}"
  - git push "https://${gh_token}@${GH_REPO}" master

都是很口语话的命令啊, 这里就不一一解释了, 真用到了可以到官方文档去看

值得注意的有两点:

  1. 脚本里面的${gh_token}是我在https://travis-ci.com里面设置的变量
  2. 如果是private 项目,到https://travis-ci.com里面去注册管理, 有免费的运行次数

安全

使用这些CI构建工具始终都要记得一点: token/apikey/secret别明文写在public仓库脚本里面, 不然分分钟被人劫持账号。 一般各种CI工具 都有处理这些key的方法, 具体翻阅文档吧。