配合Travis CI,将Hexo博客自动部署到github上
1. 新建代码仓库
新建一个代码仓库,有一个注意点,若仓库取名为【your_user_name.github.io】,则需要新建一个分支用来放.md文件,因为html文件会自动部署到master上。若仓库名只是普通的名称,则可以将.md文件放到master分支上,但这时需要新建一个分支gh-pages用来放html文件。
这里,我们就使用了【your_user_name.github.io】这样的仓库名,取名为Hexo.github.io,新建一个分支,取名为raw。
Clone到本地
git clone -b raw <仓库克隆URL> #只Clone出新建的raw分支 保留master分支用于部署
2. 安装Node.js和Hexo
请参考2.1 Hexo搭建
3. 使用Travis CI
首先我们先打开Travis CI,可以在右上角找到使用GitHub登陆的按钮。
授权完成后,你可以在左上角找到My Repositories一旁的加号“+”,点击它,它就会列出你所有的仓库,你只需要找到刚才的 hexo.github.io 并把它左侧的开关打开就可以了。
4. 生成GitHub Personal Access Token
登录GitHub,在右上角头像处进入设置。
在左侧找到 Personal access tokens,并点击右上角的 Generate new token。
需要为新的Token输入一个名字,这里我们就填入 Travis CI 好了。
确定生成后,Token将显示在页面上,此时需要将其复制并保存好,并避免泄露。遗忘Token后不能找回,只能重新生成。
最后,我们还需要生成随机字符串,并在其中选择一行随机字符串,为下文备用。
5. 配置Travis CI
首先在Travis CI中找到已经启用自动构建的仓库,并在右侧找到设置按钮。
注意:该图片中的仓库名称为SumiMakito.github.io,但我们这里的名称应该为Hexo.github.io。
有两处需要设置,首先需要启用 Build only if .travis.yml is present 选项,以避免 master 分支被构建和陷入构建循环的问题。
另外,在下方的环境变量设置处,我们需要设置两组变量,并注意保持 Display value in build log 禁用,以免构建日志泄露Token等信息。
#需要设置的两组变量
GitHubKEY = 上文生成的GitHub Personal Access Token
NOTIFY_TOKEN = 上文生成的随机字符串
在每次Push后,Travis CI将检查分支下的 .travis.yml 文件,并以此作为配置进行构建。
在分支下新建.travis.yml和build.sh。下面是我所使用的 .travis.yml :
language: node_js
node_js:
- "0.12"
install:
- npm install hexo-cli -g
- npm install hexo --save
- npm install
script:
- chmod +x ./build.sh
- ./build.sh > /dev/null
branches:
only:
- raw
在这里,配置文件限制了自动构建工作只会在 raw 分支下进行。
下面是我所使用的build.sh:
hexo generate #生成静态整站
cd ./public #生成的静态页面会存储在public目录下
git init
git config --global push.default matching
git config --global user.email "[email protected]" #填入GitHub的邮箱地址
git config --global user.name "username" #填入GitHub的用户名
git add --all .
git commit -m "Travis CI Auto Builder" #自动构建后的内容将全部以此信息提交
git push --quiet --force https://${GitHubKEY}@github.com/你的GitHub用户名/你的代码仓库名.git master #自动构建后的内容将全部以此信息提交
curl --connect-timeout 20 --max-time 30 -s http://远端服务器URL/webhook.php?_=${NOTIFY_TOKEN} #服务器Webhook 将在下文介绍
6. 测试
还记得之前的Hexo文件夹吗?
cd ./HexoBlog
hexo new hello-ci #本地没有Hexo的话可以直接跳过这一步
vim ./source/_posts/hello-ci.md
git add --all .
git commit -m "Hello, CI!"
git push #将代码push到raw分支上
登陆相应网址进行效果查看。