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 | npm install hexo-generator-feed --save |
接下来改造hexo配置,用于Travis CI发布。
1、创建hexo-deploy项目
在github创建public项目hexo-deploy,注意一定要是public项目,否则不会触发travis-ci。
git clone到本地,然后把hexo项目里的内容剪切到hexo-deploy目录。
2、配置config.yml
编辑config.yml,根据自己的需要进行配置。
3、清理文件
hexo-deploy目录里只需要保留:
1 | .git |
配置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 | sudo: false |
hexo发布
在hexo-deploy项目中,修改README.md(建议添加日期信息),然后提交代码,触发发布。
1 | git add . |
然后打开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 | after_success: |
保留commit之后,自定义域名果然不会再变化,nice。