在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
的强制推送
,烦请邮件告知我,感激不尽
本文仅仅是记录个人排坑过程,非教学文章,欢迎留言或使用邮箱跟我一起探讨与勘误