Jenkins搭建自动化部署

传统开发模式和DevOps模式

在传统开发中,大概要经过如下几个步骤:

在开发人员在开发过程中,测试和运维人员是处于空闲状态的,只有当开发人员部署后,测试人员才能进行测试,而且在测试人员测试过程中,开发人员又处于空闲状态,只有当测试出bug时,开发人员才能进行修复,这样不能及时进行反馈的状态,大大浪费了时间,更别提上线后出现bug了,所有人员都要进行加班,这样的开发体验属实不好。

于是出现了DevOps(Development and Operations)开发模式:其实就是将开发和运维结合起来的模式,新的开发模式如下图所示:

从上图可以看出,这种开发模式是大家在一起同时进行的,可以及时的进行反馈,以便进行修复。

这里有一张两种开发模式的对比图:

CI/CD

CI/CD(Continuous Integration/Continuous Delivery|Deployment)就是我们常说的持续集成和持续交付(部署)。

持续集成(CI)是指开发人员频繁地将代码更改集成到共享的代码库中,并通过自动化构建和测试来验证这些更改。其主要目的是快速发现和修复错误,确保代码的稳定性和一致性。

持续交付(CD)是在持续集成的基础上,通过自动化流程确保软件可以随时随地进行部署。其主要目的是快速、频繁地将新的代码变更交付到生产环境,确保每次交付都是经过充分验证的。

上图我们看到有两种方式,其实就是一种是经过测试后的版本交付给服务商,有服务商进行部署,一种是直接进行部署发布。

自动化部署

自动化部署、CI、CD之间的关系:

自动化部署是CD中的具体步骤,由CI进行代码测试,由CD进行发布,没有经过CI的部署是不安全的代码部署,没有自动化部署,CD阶段只能手动部署。

自动化部署的流程图如下:

Jenkins 搭建自动化部署

前面我们已经简单介绍了和自动化部署有关的一些概念,接下来我们介绍一下自动化工具jenkins和它的使用。

什么是Jenkins?Jenkins有什么用?

Jenkins 是一款开源的自动化服务器,主要用于实现 CI/CD(持续集成与持续交付/部署)流程的自动化。它通过插件化架构成为 DevOps 工具链的核心引擎。

简单来说,Jenkins一个是帮助我们实现DevOps开发模式的核心工具。

既然他是一个工具了,我们就需要对其进行安装,由于Jenkins作为持续集成服务需要常驻运行环境,我们一般将其安装在服务器上,这里我准备了一台具备Centos系统的服务器进行测试。

安装Jenkins

我这里直接下载最新版了。

Jenkins官方安装指南:https://www.jenkins.io/doc/book/installing/linux/

根据我的服务器情况,这里我通过yum进行安装(不同的Linux安装查询上述官方文档):

因为Jenkins本身是没有在dnf的软件仓库包中的,所以我们需要连接Jenkins仓库,然后才能通过yum进行安装:

1
2
3
4
5
6
7
8
9
10
11
# 连接Jenkins仓库
sudo wget -O /etc/yum.repos.d/jenkins.repo \ https://pkg.jenkins.io/redhat-stable/jenkins.repo
# 设置gpg密钥,用于验证构建产物的完整性和来源可信性
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
sudo yum upgrade
# 为jenkins包添加所需的依赖项
sudo yum install fontconfig java-21-openjdk
sudo yum install jenkins
# 通过yum下载的工具会自动加入到Linux系统服务中
# 重新加载服务配置
sudo systemctl daemon-reload

我们一般会将Jenkins设置为开机启动,这样能保证服务器重启后Jenkins能够及时启动:

1
systemctl enable jenkins

启动jenkins,初次启动可能有些慢,以为它要进行一些配置:

1
systemctl start jenkins

启动成功后我们输入服务器ip+8080,Jenkins默认端口是8080。

我们可以看到下面这个页面,红框中是初始密码路径,我们在服务器控制台中查看密码进行登录:

1
cat /var/lib/jenkins/secrets/initialAdminPassword

然后我们点击选择插件来安装这一项,就是按需安装,我主要不想安装一些我不太需要的,看个人需求选择吧。

这里选择无,我们后续配置一下镜像源,提高下载速度,当然,也可以在这一步进行下载,就是可能有些慢罢了:

然后进入创建用户页面,这一步是设置我们后续进行登录的用户:

接下来就一直点击保存,开始使用Jenkins。

进入首页后我们需要先安装一些有关我们项目自动化部署的一些插件,比如我部署的仅仅的Vue项目,我们需要git、node插件。

按下面图片操作:

下面这一步是配置国镜像源,提高下载速度:

目前我测试可用的镜像源如下:

华为

https://mirrors.huaweicloud.com/jenkins/updates/update-center.json

注意:华为云镜像已停止对 2023年前旧版本的同步。

在输入镜像地址后,Jenkins会帮助我们测试是否能连接到镜像,等待一会,如果连接不上,会出现错误提示,这个时候我们刷新一下页面让它重新连接镜像,直接连接不出现错误提示为止。在下载软件前最后都检查一下是否能够成功连接镜像。

然后我们搜索git、node插件进行安装:

如果前面没检查是否成功连接,安装的时候出现连接超时错误:

刷新几下,等他重新连上,如果测试的时候发现插件并不能很好使用,缺失某些功能,我们需要删除已安装的插件,删除之后需要重启一下。

安装成功后需要重启一下Jenkins

重新进入以后进行如下操作:

在git这一块,需要一个git可执行命令文件,没有的话会出现错误提示,比如usr/bin啥的,我这里填写过就没了。

因为jenkins安装的git是没有git可执行命令的,所以我们需要在服务器安装git:

1
yum install git

查找git可执行命令文件:

1
find / -name git # /usr/bin/git

如上图,我们发现git可执行命令文件在/usr/bin/git,填写到Jenkins配置中即可

因为我们要连接git,所以git连接远程仓库,尤其是私有仓库的时候,需要一个凭证信息,所以接下来我们要设置一个凭证信息:

然后我们就可以建立自动化任务了,步骤如下

在填写git仓库的时候Jenkins可以测试是否能够连通仓库,如果出现错误,会出现如下错误,请检查凭证信息是否正确,或者仓库地址是否填写错误,或者服务器上git没有安装,或者网络是否正常。

这里触发器规则如下:

定时字符串从左往右分别是:分 时 ⽇ ⽉ 周

1
2
3
4
5
6
7
8
9
10
11
12
# 每半⼩时构建⼀次OR每半⼩时检查⼀次远程代码分⽀,有更新则构建
H/30 * * * *
# 每两⼩时构建⼀次OR每两⼩时检查⼀次远程代码分⽀,有更新则构建
H H/2 * * *
# 每天凌晨两点定时构建
H 2 * * *
# 每⽉15号执⾏构建
H H 15 * *
# ⼯作⽇,上午9点整执⾏
H 9 * * 1-5
# 每周1,3,5,从8:30开始,截⽌19:30,每4⼩时30分构建⼀次
H/30 8-20/4 * * 1,3,5

由于是测试,这里我选择:每半⼩时构建⼀次OR每半⼩时检查⼀次远程代码分⽀,有更新则构建。

对于这个操作信息,我给出一个模板:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
pwd
node -v
npm -v

# 安装依赖
npm install

# 打包项目
npx webpack

pwd

echo '构建成功'

ls
# 删除/usr/local/nginx/html/⽂件夹⾥所有的内容
# 这里是nginx中的静态资源存放目录
rm -rf /usr/local/nginx/html/*
cp -rf ./dist/* /usr/local/nginx/html/

# 重启nginx配置
nginx -s reload

进行上述配置后,保存即可。

在我们上述的操作模板中,牵涉到了对文件的操作,这个可能需要权限,而Jenkins默认是无权操作,所以我们需要服务Jenkins权限。

修改jenkins.service配置文件:

1
vi /usr/lib/systemd/system/jenkins.service

进行以上操作后,我们返回Jenkins操作页面,我们可以点击立即构建测试是否搭建成功: