Hexo Deployment with GitLab CD
终极目标
目标:修改好Hexo源文件,push到GitLab后,可以自动编译加部署到VPS。有了自动部署,就可以在任何可以git的地方修改博客啦,不用每台机子都装一大堆环境啦!
原材料
- Hexo站点一个,源码放在GitLab的private repo里
- VPS一个,之前靠人肉rsync编译好的站点文件上去
碎碎念
说实话,我觉得我还是只会在我的Mac上更新的,而且十有八九我还是会在本地编译和看看效果的。Anyway,折腾一下,也算是体验一把GitLab CI/CD 吧!
配置Hexo Deploy
首先需要配置hexo deploy
。照着文档Hexo Deploy - Rsync修改_config.yml
就可以了。由于之前一直靠rsync
同步文件,所以这一步很简单,不需要额外安装或者配置其它东西。
配置修改后hexo d
一下,确认配置正确。
Using SSH keys with GitLab CI/CD
相关文档
步骤
- 生成一对新的 SSH key(用已有的key也可以),把公钥放到server上。
- 顺着文档2完成“Add the private key as a variable to your project”这一步。
- 准备好
.gitlab-ci.yml
。
踩坑
在项目设置里配好
SSH_PRIVATE_KEY
这个variable后,CI始终报错,报错如下。一顿折腾,发现是手贱在配置variable的时候打勾了“protected”,这样会导致variable只对protected branch/tag可见。1
2$ echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
Enter passphrase for (stdin): ERROR: Job failed: exit code 1hexo d
在rsync时报错如下。最后发现是docker需要安装rsync。1
2
3
4
5
6
7
8$ hexo d
INFO Deploying: rsync
FATAL Something's wrong. Maybe you can find the solution here: http://hexo.io/docs/troubleshooting.html
Error: spawn rsync ENOENT
at Process.ChildProcess._handle.onexit (internal/child_process.js:238:19)
at onErrorNT (internal/child_process.js:413:16)
at process.internalTickCallback (internal/process/next_tick.js:72:19)
ERROR: Job failed: exit code 1
点击More可以看到完整的.gitlab-ci.yml
.
把.gitlab-ci.yml
贴在这里,虽然不知道是不是最优雅的写法,但是能用。
1 | image: node:11.1.0 |