使用Travis CI部署Hexo博客

使用Travis CI部署Hexo博客

  使用Travis CI部署Hexo博客是Hexo官方文档推荐的部署方法,但是博客源文件会被公开。起初就是因为这一点没有使用Travis CI部署,但是刚成功部署完Hexo发了第一篇博文后我就在想,博客源文件都在本地,如果我换电脑了或者源文件不在身边或者电脑坏了怎么办?岂不是很麻烦?我这么怕麻烦个人…

  当时就搜了这个问题,果然大佬们早就提供了解决方案。一般都是把源文件也放在github,或者推送到分支。我想既然都放到分支上了,不如直接按官方推荐的,用Travis CI部署,这样甚至可以随时随地修改博文,即便本地没有环境,也可以把md交到仓库即时发布。


关于Travis CI

  Travis CI提供持续集成服务,目前仅支持Github项目。它提供环境帮用户构建、测试、部署项目,在你提交代码后,它会clone你的项目,配置环境并安装依赖,然后返回运行结果。具体内容请查阅 官方文档

  放到Github Pages部署的Hexo来说,就是当你的Hexo项目有改变时,它会帮你生成静态文件,并部署到你指定的项目分支。


部署Hexo

  Hexo官方文档 提供了详细的步骤,我就记录一些遇到的坑吧。

分支问题

  按照Hexo官方文档的步骤,Hexo项目被推送到项目Master分支,然后由Travis CI将静态文件发布至gh-pages分支,在Github Pages设定中选择gh-pages分支进行部署。我记得不久前Github Pages还是可以自行选择分支的,但现在仅支持部署Master分支了,如图。

  也就是说Master分支要放静态文件,另开一个分支放源文件。第一次部署Hexo的朋友需要注意这个问题,对于已经把静态文件推送到Master分支的朋友来说,没有任何影响,源文件直接推送新的分支就vans了。

1
2
3
4
5
git init
git add .
git commit -m "init blog"
git remote add origin https://github.com/<用户名>/<用户名>.github.io.git
git push origin master:hexo

  注意配置.travis.yml,这里把源文件推送到hexo分支。

.travis.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
sudo: false
language: node_js
node_js:
- 10
cache: npm
branches:
only:
- hexo # 对Hexo分支进行构建
script:
- hexo generate
deploy:
provider: pages
skip-cleanup: true
github-token: $GH_TOKEN
target-branch: master # 设置部署的目标分支
keep-history: true
on:
branch: hexo
local-dir: public

仓库冲突问题

  按照官方文档操作完毕,.travis.yml也配置完成,使用脚本一套操作把文件推送到Github,默默等待Travis CI部署我的博客。刷新浏览器检验是否成功,居然白板??赶紧查Travis CI的记录,提示no layout,仓库内的主题文件没有被推送导致静态文件压根没生成!

  

  拐回来看被我无视的bash记录,项目内居然有关联别的仓库?是clone icarus主题时带来的。根据提示输入 git rm –cached themes/icarus 是不行的,icarus目录内存在.git 目录需要删除。

  

  进入icarus目录直接删除文件夹。问题解决。

gitignore问题

  解决仓库冲突问题后,我又推送了,这回推送过程没问题,Travis CI构建静态文件倒是出了问题。刷新浏览器依然时白板,Travsi CI记录是这样的。

  

  icarus主题目录里缺了配置文件_config.yml,当icarus发现目录内没有配置文件时会自动创一个,这锅必须是.gitignore的,点开文件发现里面赫然记录着_config.yml,赶紧删掉!


总结

  Travis CI能够提供环境,帮助构建、测试及部署Hexo项目,使用Travis CI部署博客满足了随时随地修改内容的强迫症需求,解决了出差、旅游时不方便水博文的问题,也解决了随着博客内容不断增多造成的生成及推送静态文件时的等待问题(虽然并不多)。优雅地推送源文件就vans了,或者在仓库添加/修改md文件。暂时还没有尝试在其他主机配置Hexo本地文件。以上。

unsplash-logoMichael Liao


Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×