随着 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 自动部署 Hexohttp://www.jianshu.com/p/5e74046e7a0f 3、使用 Travis 自动部署 Hexo 到 Github 与 自己的服务器https://segmentfault.com/a/1190000009054888