利用Coding部署Hexo

前言

之前看到CYF在博客写了利用Travis-CI实现在线更新Hexo

想到我也要高中去了/滑稽脸,我也试了一下Travis-CI。但是可能我技术不到家,次次都失败,英文界面也看得我头大。

后来在Coding里面看见了持续集成,心里一动,说不定这玩意儿还真行。

上传Hexo源文件到Coding

参考我之前的文章吧,我都懒得复制了传送门,不过那篇我也没写完/偷懒。

之后我们来到Coding界面。

可能会没有持续集成,需要到左下角的项目设置里打开。

你们可能会好奇,为什么我不用持续部署。因为我的博客文件太大了,Coding只支持128MB及以下的html文件部署。唉,还是Github好。

配置构建计划

在持续集成的子目录中找到构建计划,创建构建计划,并拉到最下面,选择自定义构建过程。

UQUPoj.png

然后自定义一下红框内的内容。我没有测试过Github等其他的仓库会不会出发Coding的构建,毕竟我用Coding来托管我的Hexo源代码。

UQUa0e.png

然后我们进入如下界面了。

UQUDfI.png

为了方便传送 Jenkinsfile 配置,我采用了文本编辑器。

UQUHXT.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
pipeline {
agent any
stages {
stage('克隆项目') {
steps {
sh 'git clone https://{user.name}:{token}@e.coding.net/atasgayb/blog/source.git .'
sh 'ls -a'
}
}
stage('安装依赖') {
steps {
sh 'ls -a'
sh 'npm install'
sh 'npm install -g hexo-cli'
sh 'npm install hexo --save'
sh 'npm install hexo-deployer-git --save'
}
}
stage('构建发布') {
steps {
sh 'hexo cl'
sh 'hexo g -d'
}
}
}
}

在代码块的第6行,{user.name}和{token}对应Coding中的token用户名和token。

token需要的权限是读取私有仓库(Coding的仓库默认都是私有的)。

这个Jenkinsfile配置不是我自己写的,当时源代码是没有sh 'npm install hexo-deployer-git --save'这么一行,我说我怎么老是构建失败,hexo d根本不能使用!!!

然后我们把Hexo源文件文件夹下面的_config.yml文件里的deploy地址改一下。

改成这样:

1
2
3
4
deploy:
type: git
repository: https://a3xz7tew834hgfd374m763453a4gr7fd32@github.com/HenryHe613/blog.git
branch: master

@前面的一串字符串是token,需要在Github里生成,并且需要仓库的读写权限。

/滑稽,别想了,这个token是我乱打的,我可不会傻到把token送给你们hh

然后试一下把本地的文件push到Coding上,看看会不会构建成功。

如果查看完整日志的时候出现这个:npm ERR! Unexpected end of JSON input while parsing near,可能你就部署失败了。需要在 Jenkinsfile 配置 中添加npm cache clean --force这玩意儿,清理npm的错误。

优化构建速度

(2020.8.1 added)

每次都这么构建,着实有点费时间。前几天看到了Coding的持续部署中有缓存可以设置,便尝试了一下,能很大提高效率。

持续集成的设置中找到变量与缓存,然后像我一样设置

之后立即构建一下,把你的文件缓存起来。

接下去我们要改一下Jenkinsfile配置。不然由于缓存,你Jenkinsfile配置中的git clone将无法运行,导致报错。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
pipeline {
agent any
stages {
stage('克隆项目') {
steps {
sh 'git pull https://{user.name}:{token}@e.coding.net/atasgayb/blog/source.git'
sh 'ls -a'
}
}
stage('安装依赖') {
steps {
sh 'ls -a'
sh 'npm install'
}
}
stage('构建发布') {
steps {
sh 'hexo g -d'
}
}
}
}

设置成以上的代码,就OK了。你可以享受缓存的快感了。虽然用了缓存之快了十几秒。