当时搭建 wiki 的时候,只注意到 travis-ci.com 支持私有仓库,但是没发现它是有免费次数限制的,这次 szhshp 同学 提醒才发觉。另外,之前我的 wiki 一直是丢在 Git pages 上的,即使加上了 CDN,速度依然堪忧,于是重新在 CODING 部署持续集成服务,利用 CODING CI 将 hexo 的静态文件部署到 Web 服务器。
前言
与 Travis-CI 不同,CODING CI 是基于 Jenkins 的,所以其持续集成的脚本亦为 Jenkinsfile,不过 Alliot 本身对 Jenkins 与其脚本的语法并不熟悉,只知道这些个概念,所以在编写 Jenkinsfile 的时候还是踩了不少的坑。
流程其实很简单:
Web服务器设置
配置密钥登录
由于需要使用 SCP,而 SCP 本身是走 ssh 的,所以我们需要在服务器系统中添加一个用于 CODING CI 传输文件的用户(为安全起见,强烈建议新建普通用户,给予有限的权限,而非 root)。这里我假设新建用户为 alliot_blog
,Web 服务器目录为 /var/www
:
新建构建计划
在 hexo 源文件仓库中点击 “新建构建计划” ,为了方便我们直接选择 SCP 的 Jenkinsfile 模板:
填入服务器 IP 与用户名,在 ”请选择凭据“ 中导入并选择先前下载的 id_rsa
私钥,确认。
流程配置
进入流程配置中选择文本编辑器,覆盖写入如下配置:
保存即可,完成流程配置。
缓存设置
在“变量与缓存”中,勾选 npm
,并增加目录 /root/workspace/node_modules
以提高构建的速度,或者还可以在 npm install
处,更换 npm
为 cnpm
,不过我测试速度优化不明显。
构建测试
返回“构建计划”中,选择“立即构建”,即可,在“构建过程”中,我们可以查看构建进度,以排障。
易踩坑点
- Jenkinsfile 中,变量的引用。CODING CI DOC
- “hexo 环境构建” 的 “stage” 中,
npm install
如果不使用-g
全局安装,在“部署”的 “stage” 会出现报错,很奇怪,一般来说,只有hexo-cli
是需要全局安装的,这里不深究了,反正 CI 环境用后即焚,无所谓啦。 - sshPut 环节出现错误的时候,首先查看目录权限,我当时是
usermod -a -G www alliot_blog
给用户添加到www
用户组就直接就去测试能不能创建删除文件的,发现即使目录是 775 权限也提示没有权限,最终想起,忘记重启终端来生效配置-_-! 丢人… - 接上一条,除去权限问题,还可能出现
no such file
,这是因为你使用了非绝对路径造成的。