使用Travis CI自动部署Hexo博客

Author Avatar
wshunli 11月 09, 2017
  • 在其它设备中阅读本文章

随着 Hexo 文章的增多,加上压缩文件的时间,部署时间越来越长。

我一般都是将博客的源文件保存到私有仓库中,虽然几个简单地命令就能部署,但是过程还是很繁琐。最近申请了 Github Student Developer Pack ,就想利用软件开发中的持续集成工具 Travis CI 来帮助完成 Hexo 博客的部署过程。这样就只需要把源代码 push 到仓库就能自动部署好了。

CI 是 Continuous Integration 的缩写,持续集成之意。持续集成是一种软件开发实践,每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

Hexo 搭建

关于 Hexo 博客的搭建请参考文章:https://www.wshunli.com/posts/9642fffa.html

Travis CI 配置

1.使用 GitHub 账户登录 Travis CI 官网,然后用 Github 账号登陆,就可以看到可以持续集成的仓库。

还有个地址 https://travis-ci.com 可以部署 Github 私有仓库。

选择要启用的项目,打开

然后选择一些通用的设置

2.登陆 GitHub –Settings -Developer Settings 选项,找到 Personal access tokens 页面。

点击右上角的 Generate new token 按钮会生成新的token,点击后提示输入密码后继续,然后来到如下界面。
取个名字,勾选相应权限,这里只需要 repo 下全部和 user 下的 user:email 即可。

生成完成后,将该token拷贝下来。

如果需要将代码同时部署到 Coding 类似
3.登陆 Coding ,账户 -访问令牌,新建访问令牌:

勾选相应权限:

4.将上面获取到的token添加到 Environment Variables 部分,值为该 token ,而名称为 GH_TOKEN、CD_TOKEN 。

创建 .travis.yml

要想自动部署还需在博客源码新增加 .travis.yml 配置文件。

# 设置语言
language: node_js
# 设置相应的版本
node_js:
  - '6'
# 设置只监听哪个分支
branches:
  only:
    - master
# 缓存,可以节省集成的时间
cache:
  directories:
    - node_modules
before_install:
  - npm install -g hexo-cli
install:
  - npm install
script:
  - hexo clean
  - hexo g
after_script:
    - cd ./public
    - git init
    - git config user.name "yourname" # 修改name
    - git config user.email "youremail" # 修改email
    - git add .
    - git commit -m "Travis CI Auto Builder"
    - git push --force --quiet "https://${GH_TOKEN}@${GH_REF}" master:master 
    # GH_TOKEN 是在 Travis 中配置 token 的名称
branches:
    only:
        - master #只监测 master 分支,master是我的分支的名称,可根据自己情况设置
env:
    global:
        - GH_REF: github.com/yourname/yourname.github.io.git 
        # 设置 GH_REF,注意更改 yourname

实现自动部署

将原代码 push 到 Github 即可,如果配置没问题就该自动构建了。

问题

虽然实现了基本的自动部署,还是有问题的。

master commit 树被清空

自动部署会把原来的 commit 清空,显然不是我们想要的结果。

为了解决这个问题,将配置文件改为了如下的内容:

after_script:
    - 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 "yourname"
    - git config user.email "your email"
    - git add .
    - git commit -m "Travis CI Auto Builder"
    - git push --force --quiet "https://${GH_TOKEN}@${GH_REF}" master:master

添加 commit 时间戳

commit 的描述一直是 Travis CI Auto Builder

Travis CI Auto Builder
Travis CI Auto Builder
Travis CI Auto Builder
// 之前
Site updated: 2017-11-07 22:05:16
Site updated: 2017-11-07 17:19:32
Site updated: 2017-11-06 18:04:53

最终 .travis.yml 配置文件:

# 设置语言
language: node_js
# 设置相应的版本
node_js:
  - '6'
# 设置只监听哪个分支
branches:
  only:
    - master
# 缓存,可以节省集成的时间
cache:
  directories:
    - node_modules
before_install:
  - export TZ='Asia/Shanghai'
  - npm install -g hexo-cli
  - chmod +x ./publish-to-gh-pages.sh
install:
  - npm install
script:
  - hexo clean
  - hexo g

after_script:
  - ./publish-to-gh-pages.sh
env:
    global:
        - GH_REF: github.com/yourname/yourname.github.io.git
        # 设置GH_REF,注意更改成自己的仓库地址
        - CD_REF: git.coding.net/yourname/repository.git
        # 同时部署到 Coding,repository 为仓库名称

其中 publish-to-gh-pages.sh 文件:

#!/bin/bash
set -ev
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  "yourname"
git config user.email "youremail"
git add .
git commit -m "Travis CI Auto Builder at `date +"%Y-%m-%d %H:%M"`"
git push --force --quiet "https://${TravisCIToken}@${GH_REF}" master:master
git push --force --quiet "https://yourname:${CD_TOKEN}@${CD_REF}" master:master
# 同时部署到 Coding,注意修改 yourname

参考资料
1、使用Travis CI自动部署Hexo博客
http://www.itfanr.cc/2017/08/09/using-travis-ci-automatic-deploy-hexo-blogs/
2、使用 Travis CI 自动部署 Hexo
http://www.jianshu.com/p/5e74046e7a0f
3、使用 Travis 自动部署 Hexo 到 Github 与 自己的服务器
https://segmentfault.com/a/1190000009054888

如果本文对您有所帮助,且您手头还很宽裕,欢迎打赏赞助我,以支付网站服务器和域名费用。 https://paypal.me/wshunli 您的鼓励与支持是我更新的最大动力,我会铭记于心,倾于博客。
本文链接:https://www.wshunli.com/posts/7dcaaf9e.html