Travis CI自动部署Hexo博客

📋
为了实现“使用Travis CI自动部署Hexo博客”可是花了不少时间,网上搜索了一大堆教程,看到眼睛都花了。功夫不负有心人,终于成功部署。
设置中我主要是跟下面的两篇文章去做,作一个记录。

neoFelhz的travis持续构建

IT范儿的使用Travis CI自动部署Hexo博客

下面说说分支保护和安全性


分支保护
为了防止你不小心将 Hexo 生成的静态整站覆盖了存放工程文件的分支,你需要对存放工程文件的分支开启写保护。
进入 Repo 的 Settings,在 Branches 选项卡中 Protected Branches 选中存放你的 Hexo 工程文件的分支,只勾选第一个勾 Protect this branch 即可。点击 Save Changes 保存。

因为在 Travis CI 构建时,是使用 git push –quiet –force 完成 deploy 的,所以对 Hexo 工程文件所在分支进行写保护(即禁止 Force Push)可以有效保护你的工程文件。


加密 Personal Access Token
Travis CI 的环境变量相对可靠。但 GitHub Personal Access Token 权限太大,不能轻易暴露出去。所以如果你对 Travis CI 不太放心,那么可以用 Travis 命令行工具对其进行加密。

在本地配置好 Ruby 环境后,执行

gem install travis
travis login
安装 Travis 命令行工具并登陆。(我没用登录命令也行)

travis encrypt ‘GitHubKEY=< 这里填入你生成的 Token >’ –add
上面命令会自动在 .travis.yml 中添加如下内容(最后一行):

env:
  global:
  - GH_REF: github.com/nolevo/nolevo.github.io.git
  - secure: SNuijrjt50XuZd2X1apWlIkge7YEJQSl22TvGD4HrqrP3o4qJUeUwv....

上面的一长串字符串就是加密后的环境变量。之后,在 Travis 执行脚本时,就可以直接使用该环境变量了。由于已经在 .travis.yml 里完成 env 的定义,你就不需要在 Travis CI 后台配置 GitHubKEY 变量了。


最后送上我的.travis.yml设置代码

language: node_js
node_js: stable
cache:
  apt: true
  directories:
  - node_modules
before_install:
- export TZ='Asia/Shanghai'
- npm install hexo-cli -g
- chmod +x ./publish-to-gh-pages.sh
install:
- npm install
script:
- hexo cl
- hexo g
after_script:
- "./publish-to-gh-pages.sh"
branches:
  only:
  - hexo
env:
  global:
  - GH_REF: github.com/xxxxx/xxxxx.github.io.git
  - secure: SNuijrjt50XuZd2X1apWlIkge7YEJQSl22TvGD4HrqrP3o4qJUeUwvTgdU29

publish-to-gh-pages.sh代码

#!/bin/bash
set -ev

# get clone master
git clone https://${GH_REF} .deploy_git
cd .deploy_git
git checkout master

cd ../
mv .deploy_git/.git/ ./public/

cd ./public

git config user.name "nnnnn"
git config user.email "ttttt@gmail.com"

# add commit timestamp
git add .
git commit -m "Travis Ci Auto Builder at `date +"%Y-%m-%d %H:%M"`"

git push --force --quiet "https://${GitHubKEY}@${GH_REF}" master:master

End