Jenkins + Github实现持续化部署个人博客至服务器

前言

我的博客是采用hexo + next + git实现的,最开始用的是Github,但是碍于速度慢进而转至Gitee,不过随着文章以及图片的越来越多,突然有一天发现在push代码时总是提示服务器断开连接啥啥啥的··· 刚开始还不知道是什么原因,研究了好久才发现是Gitee限制比较多,一次性不能上传太多文件,最后无奈转回了Github。

转回Github之后又发现Jenkins拉取Gitee与Github的配置有些不同,正好之前没有记录Jenkins如何配置拉取Github,并且配置后出问题网上还没有什么好的解决方法,这次正好记录一下。

Jenkins所需插件

  • Github
  • Publish Over SSH

获取Github个人访问令牌

1、进入Github,并登录

2、进入设置:Settings > Developer settings > Personal access tokens

3、点击Generate new token创建个人令牌

4、填写信息:

Snipaste_2022-08-19_20-43-34

Snipaste_2022-08-19_20-44-56

5、创建之后会显示密钥,此时把密钥保存下来,注意该密钥只会显示这一次哦~ 要是不保存就得删除重新创建了

Jenkins配置Github持续部署

1、Jenkins新建任务

Snipaste_2022-08-19_21-09-06

2、配置系统中的Github信息

前往系统管理 > 系统配置 > Github配置Github信息

Snipaste_2022-08-19_21-15-12

然后

Snipaste_2022-08-19_21-15-42

添加个人令牌

Snipaste_2022-08-19_21-17-29

选择刚刚添加的个人令牌

Snipaste_2022-08-19_21-18-55

Snipaste_2022-09-12_21-00-52

最后保存即可

3、配置任务信息

1、配置Github仓库

选中Github项目,然后填写仓库地址:

Snipaste_2022-08-19_21-10-12

源码管理选择Git,并且按图片要求填写仓库地址:

Snipaste_2022-08-19_21-11-54

Git设置处的仓库地址必须加上个人访问令牌,格式:https://个人访问令牌@github.com/liuhaoan/liuhaoan.git

注意:认证选项空着就行了,因为个人访问令牌已经在链接上了

选择分支:

Snipaste_2022-08-19_21-22-01

配置Git拉取时的超时时间,防止因为网络问题拉取仓库文件失败:

Snipaste_2022-08-19_21-23-45

新增之后填写超时时间,可以多写一点

Snipaste_2022-08-19_21-25-03

2、配置Github提交后远程触发Jenkins任务

Snipaste_2022-08-19_21-26-10

Snipaste_2022-08-19_21-29-25

Snipaste_2022-08-19_21-30-43

3、配置构建指令

1、添加本地shell指令执行,对拉取的文件进行打包,打包之后传到服务器中

Snipaste_2022-08-19_21-31-30

1
2
rm -f $JOB_NAME.tar.gz
tar -zcvf $JOB_NAME.tar.gz ./*

2、用SSH Publishers插件把打包好的文件传送到服务器中

Snipaste_2022-08-19_21-33-41

1
$JOB_NAME.tar.gz

3、上传完之后清理之前的文件,并且把新的文件解压出来

Snipaste_2022-08-19_21-35-54

1
2
rm -rf /var/lib/docker/volumes/nginx_html/_data/liuhaoan/*
tar -zxvf $JOB_NAME.tar.gz -C /var/lib/docker/volumes/nginx_html/_data/liuhaoan

到此就完成了Jenkins + github的持续部署。

设置Github触发链接

Snipaste_2022-09-12_21-01-40

常见问题

RPC failed; curl 56 GnuTLS recv error (-54)

在运行git clone命令时很容易出现这个错误,这是下载的包太大,网速慢超时报错。由于git默认缓存大小不足导致的,使用下面的命令增加缓存大小

1
git config --global http.postBuffer 524288000