在coding中自动化部署hexo
当掌握了如何配置hexo后,我心里在想,如果每次我写完blog后要做以下步骤部署代码:
$ hexo cl && hexo g && hexo d,是否有方法能直接通过git推送到仓库就自动编译好代码呢?于是乎就寻找有没有自动化部署的方法,不找不知道,一找吓一跳,为了学好自动化部署,愣是碰了不少比壁,当然也学会了不少东西,最后也是成功部署,写这篇文章记录一下我踩过的坑
工具/框架版本
| 工具/框架 | 版本 |
|---|---|
| node | 12.22.5 |
| npm | 6.14.14 |
| hexo-cli | 4.3.0 |
| git | 2.33.0 |
| vscode | 1.59.1 |
| source tree | 3.2.1 |
配置持续集成
排坑环节
这片文章部署后会出现一系列小插曲,但这并不是文章的代码有误,而是由于框架版本升级之后出现的一系列兼容问题。
我使用的是《Coding持续集成自动部署Hexo博客》内的方案1
为了更好地说明其中的问题,我贴出文章中自定义构建过程的代码
pipeline { |
当我使用上述代码构建时,会出现构建失败的提示,以下是排坑环节
hexo g的问题
问题
查看构建过程的字样,发现问题出现在sh hexo g这个步骤
报错信息如下
FATAL { err: [2021-08-25 18:15:36]
TypeError: line.matchAll is not a function
…
} ‘Something's wrong. Maybe you can find the solution here:
%s’ ‘\u001b[4mhttps://hexo.io/docs/troubleshooting.html\u001b[24m'
原因
版本12.0.0的Node.js中支持String.matchAll()
两种解决方法:
请将nodejs升级到高于
12.0.0的版本将
_config.xml中的highlight->enable的值从true更改为false
这样可以避免异常,但方法二会让代码失去高亮显示功能
@bovenson ———— stackoverflow
解决方法
如果嫌麻烦,可以使用方案2,直接在_config.xml里设置就好了,而我采用了方案1,保留了语法高亮的功能
首先升级nodejs的版本,在stage('检出')和stage('构建')之间加入一段升级nodejs的stage()方法
代码如下
stage('检出'){ |
这样,重新提交代码则成功把v10.x.x的nodejs升级为v12.22.5的nodejs(选择这个版本是为了与我的本机的nodejs版本保持一致)
npm install -g的问题
问题
错误信息如下
npm install -g
npm ERR! code ENOLOCAL
npm ERR! Could not install from “” as it does not contain a package.json file.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2021-08-25T12_47_51_060Z-debug.log
script returned exit code 1
原因
初步估计是因为更新了高版本的nodejs后出现冲突,之前的版本有点低(待明确)
解决方法
把stage(构建)里的做以下修改
stage('构建') { |
SourceTree的问题
问题
在说明这个问题之前,我是用的是最新版的SourceTree(v4.x.x),在感叹它好用之余,就被坑到了
当我第二次推送内容到代码仓库的时候会出现以下报错
Updates were rejected because the tip of your current branch is behind its remote counterpart. Integrate the remote changes (e.g. hint: ‘git pull …’) before pushing again.
意思为
更新被拒绝,因为您当前分支的最新提交落后于其对应的远程分支。
再次推送前,先与远程变更合并(如 ‘git pull …’)
原因
在我成功构建之后,我代码仓库中的代码就会自动被编译好,也就是说,我的代码仓库跟我本地电脑的内容是不一样的
这时候我再push我的hexo源码去我的代码仓库就会出现以下报错
解决方法
这个时候必须要用到SourceTree里的强制推送功能
很坑的是SourceTree v4.x.x使用无法直接开启强制推送功能,而v4.x.x则可以开启,因此,直接选择v3.x.x的SourceTree,我这里使用的是v3.2.1(255),这个问题就迎刃而解了
后记
如果有小伙伴知道怎么修改Mac SourceTree v4.x.x的强制推送,烦请邮件告知我,感激不尽
本文仅仅是记录个人排坑过程,非教学文章,欢迎留言或使用邮箱跟我一起探讨与勘误