
持续集成工具:Jenkins
Jekins简介
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,主要用于持续、自动的构建一些定时执行的任务。Jenkins用Java语言编写,可在Docker等流行的容器中运行,也可独立运行。
Jenkins是一个易于安装部署配置的工具,可以通过docker安装,或下载war包以及通过docker容器等快速实现安装部署,可方便Web界面配置管理。Jenkins支持分布式构建,可以让多台计算机一起构建/测试。
同时 Jenkins 能实时监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。Jenkins可以构建一个自动化的持续集成环境,可以使用它来“自动化”编译、打包、分发部署应用,它兼容Node、Ant、Maven、Gradle等多种第三方构建工具,同时与SVN、Git能无缝集成,也支持直接与知名源代码托管网站,如GitHub、Bitbucket直接集成。
Jekins安装
上文说到,Jenkins是一个易于安装部署配置的工具。他支持apt、yum、docker等方法部署,非常的人性化。我们以Ubuntu系统为例,介绍一下各种部署方式:
1、Docker部署
为了更方便管理应用,我更推荐使用docker部署。Docker官方和Jenkins官方都有对应的Docker镜像,以jenkins官方的镜像为例:
docker run --name jenkins -d \
--volume /opt/jenkins/docker.sock:/var/run/docker.sock \
--volume /opt/jenkins/data:/var/jenkins_home \
--volume /opt/jenkins/docker:/usr/bin/docker \
-p 8080:8080 \
jenkins/jenkins
2、apt部署
官方文档:文档地址
sudo wget -O /usr/share/keyrings/jenkins-keyring.asc \
https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
/etc/apt/sources.list.d/jenkins.list > /dev/null
sudo apt-get update
sudo apt-get install jenkins
需要注意的是随着Debian12的发布,OpenJDK11不再包含在内。它已被Open JDK 17所取代。你还需要安装jdk
sudo apt-get install openjdk-11-jre
很麻烦的一件事,所以Docker yes!
3、初始化
安装完成访问8080端口即可使用Jenkins,按照推荐的配置进行初始化即可。
4、内存限制(土豪略过)
Jenkins在构建前端项目的时候,总会吞噬内存,导致服务器宕机,所以要对Jenkins容器限制内存使用量。即加入参数:
--memory=3g
5、建立ssh连接
在打包完成后,我们需要将文件上传到服务器目录,所以需要建立与目标服务器建立ssh连接:
# 如果是docker安装,需要进入到容器内执行命令
ssh-keygen
ssh-copy-id [用户名]@[IP地址]
# 输入正确的密码后,即可建立连接
Jekins实例
以Vue项目部署为例,当我们持续迭代一个Vue项目,每次版本迭代都会经历:打包、得到dist文件夹、上传服务器,这些过程。现在我们可以使用Jekins自动化的完成这一迭代过程。
我们将使用vue-next-admin 作为实例项目进行构建。
1、插件准备
因为打包Vue项目需要安装node环境,Jenkins提供node插件来提供服务。首先进入Jekins系统管理、插件管理:
点击Available plugins,在输入框搜索Node,勾选node,点击安装:
在全局配置内新增Node版本:
2、创建一个任务,选择构建一个自由风格的软件项目:
3、输入git地址:https://gitee.com/lyt-top/vue-next-admin.git ,公开的仓库不需要填写Credentials,分支默认master:
4、选择构建环境:
勾选Delete workspace before build starts,在生成开始前删除工作区。
勾选Provide Node & npm bin/ folder to PATH,然后选择对应的node版本。
5、在构建步骤(build-steps)中新建一个shell步骤:
6、执行如下shell:
# 检查node
node -v
# 检查npm
npm -v
# 设置加速镜像
npm config set registry http://registry.npmmirror.com
# 初始化
npm install
# 打包
npm run build
# 备份原文件
# 获取当前日期和时间,格式为YYYY-MM-DD_HH-MM-SS
current_datetime=$(date +"%Y-%m-%d_%H:%M:%S")
# 定义旧文件夹名和新文件夹名
old_folder_name="/opt/dist"
new_folder_name="/opt/dist-${current_datetime}"
# 检查旧文件夹是否存在
if [ -d "$old_folder_name" ]; then
# 重命名文件夹
mv "$old_folder_name" "$new_folder_name"
echo "文件夹已重命名为 $new_folder_name"
else
echo "文件夹 $old_folder_name 不存在"
fi
# 将dist发送到目标服务器
scp -r ./dist user@host:/opt/dist
7、点击立即构建,即可打包项目,文件会被发送到目标服务器的/opt目录下。
7、自动构建
我们想在代码推送到git上后,自动触发构建流程,自动发版。使用SCM构建触发器即可实现:
日程表中的H/5
表示每 5 分钟的一个随机分钟(这有助于分散负载)。* * * * *
分别代表分钟、小时、日期、月份、星期几。