0%

Hexo配置Travis CI自动发布

CI, CD and CD

CI,CONTINUOUS INTEGRATION,持续集成。
在持续集成环境中,开发人员将会频繁的提交代码到主干。这些新提交在最终合并到主线之前,都需要通过编译和自动化测试流进行验证。

CD,CONTINUOUS DELIVERY,持续交付。
持续交付就是应用发布出去的过程。这个过程可以确保我们尽可能快的实现交付。这就意味着除了自动化测试,我们还需要有自动化的发布流,以及通过一个按键就可以随时随地实现应用的部署上线。为了发挥持续交付的优势,一般需要先进行小批量发布,尽快部署到生产线,以便在出现问题时方便进行故障排除。

CD,CONTINUOUS DEPLOYMENT,持续部署。
持续部署是持续集成和持续交付的合并。当开发人员在主分支中合并一个提交时,会触发工作流,包括构建、单元测试、预发布、验收测试、生产发布、冒烟测试等。如果一切顺利,则成功部署到生产环境中。如果某个工作流失败,则不会部署到生产环境。

更多关于CI/CD内容参考详解CI、CD & CD什么是 CI/CD?,关于发布环境的划分参考Deployment environment

在gitlab中,无论是CI、CD还是CD,都可以通过配置gitlab-ci.yml来实现。而github,在2019年8月8日也支持内置的CI/CD了。但是本文中,并不是使用github内置的CI/CD,而是使用Travis CI来实现hexo的自动发布。

《Hexo配置多个git仓库》一文中已经学习了hexo配置多个git仓库的方法,发布项目也很简单。为什么还需要hexo的自动发布?因为发布流程还可以更简单。而且,现在的发布方式,如果想要多台电脑同时使用,那么每台电脑都需要配置hexo环境,很麻烦。如果本地只负责写写markdown文件,而构建发布都放到云端,是不是更加美好?本文要做的,就是这样一件事。

安装配置本地hexo

参考《Hexo环境搭建2018年5月版》,安装v10.16.3版本的node,创建hexo项目,然后把需要的依赖写入package.json:

1
2
3
4
5
npm install hexo-generator-feed --save
npm install hexo-generator-sitemap --save
npm install hexo-generator-baidu-sitemap --save
npm install hexo-deployer-git --save
npm install hexo-generator-searchdb --save

接下来改造hexo配置,用于Travis CI发布。

1、创建hexo-deploy项目
在github创建public项目hexo-deploy,git clone到本地,然后把hexo项目里的内容剪切到hexo-deploy目录。

2、配置config.yml
编辑config.yml,根据自己的需要进行配置。

3、清理文件
hexo-deploy目录里只需要保留:

1
2
3
4
5
.git
.gitignore
package.json
_config.yml
README.md

配置travis.yml

主要参考使用Travis CI持续部署Hexo博客將 Hexo 部署到 GitHub Pages
已知 voidking.github.io 和 voidking 是hexo发布后的git仓库(public),hexo-backup是存储markdown文件的git仓库(private)。

1、安装Travis CI插件
在github添加Travis CI插件,并且在Applications settings配置Travis CI的权限。

2、生成access token
访问github的Personal access tokens页面,Generate new token。Note输入travis,Select scope选择repo,然后点击Generate token。生成了一个token,保存它。

3、添加access token
访问Travis CI Pro,找到hexo-deploy项目,Settings,在Environment Variables一栏填入Name为GITHUB_TOKEN,VALUE为github的access token。

3、在hexo-deploy目录下添加.travis.yml文件,内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
sudo: false
language: node_js
node_js:
- 10.16.3
cache: npm
branches:
only:
- master # build master branch only

env:
global:
- HEXO_BACKUP_REPO: github.com/voidking/hexo-backup.git
- HEXO_THEME_REPO: github.com/voidking/hexo-theme-next.git
- GITHUB_PAGES_REPO: github.com/voidking/voidking.github.io.git
- VOIDKING_REPO: github.com/voidking/voidking.git

before_install:
- npm install hexo -g

install:
- npm install

script:
- git clone https://${HEXO_THEME_REPO} themes/next
- git clone https://${GITHUB_TOKEN}@${HEXO_BACKUP_REPO} hexo-backup
- mv hexo-backup/source .
- rm -rf source/private
- hexo g

after_success:
- git config --global user.name "voidking"
- git config --global user.email "voidking@qq.com"
- cd ./public
- git init
- git add .
- git commit -m "Travis CI Auto Builder"
- git push --force --quiet "https://${GITHUB_TOKEN}@${GITHUB_PAGES_REPO}" master:master
- git push --force --quiet "https://${GITHUB_TOKEN}@${VOIDKING_REPO}" master:master

hexo发布

在hexo-deploy项目中,修改README.md(建议添加日期信息),然后提交代码,触发发布。

1
2
3
git add .
git commit -m "20200202deploy"
git push

然后打开Travis CI - hexo-deploy,即可看到构建发布的日志。

如果构建发布出错,根据提示修改发布脚本或者markdown文件即可。

至此,Hexo配置Travis CI自动发布完成!

域名404问题

发布完成,出现了一个神奇的问题,www.voidking.com 域名404。
查看github pages配置,发现自定义域名变回了 voidking.github.io 。

神奇了!莫非,是因为force push刷掉了git仓库的commit?那就保留commit试试。
修改.travis.yml的aftersuccess部分:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
after_success:
- git config --global user.name "voidking"
- git config --global user.email "voidking@qq.com"
- git clone https://${GITHUB_TOKEN}@${GITHUB_PAGES_REPO} voidking
- unalias cp
- cp -rf public/* voidking
- cd voidking
- git add .
- git commit -m "Travis CI Auto Builder"
- git push --force --quiet "https://${GITHUB_TOKEN}@${GITHUB_PAGES_REPO}" master:master
- cd ../public
- git init
- git add .
- git commit -m "Travis CI Auto Builder"
- git push --force --quiet "https://${GITHUB_TOKEN}@${VOIDKING_REPO}" master:master

保留commit之后,自定义域名果然不会再变化,nice。