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系统管理、插件管理:

jenkins-5.png

点击Available plugins,在输入框搜索Node,勾选node,点击安装:

jenkins-6.png

在全局配置内新增Node版本:

jenkins-8.png

2、创建一个任务,选择构建一个自由风格的软件项目:

jenkins-2.png

3、输入git地址:https://gitee.com/lyt-top/vue-next-admin.git ,公开的仓库不需要填写Credentials,分支默认master:

jenkins-3.png

4、选择构建环境:

jenkins-9.png

勾选Delete workspace before build starts,在生成开始前删除工作区。

勾选Provide Node & npm bin/ folder to PATH,然后选择对应的node版本。

5、在构建步骤(build-steps)中新建一个shell步骤:

jenkins-4.png

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目录下。

jenkins-7.png

7、自动构建

我们想在代码推送到git上后,自动触发构建流程,自动发版。使用SCM构建触发器即可实现:

QQ浏览器截图20240321105740.png

日程表中的H/5 表示每 5 分钟的一个随机分钟(这有助于分散负载)。* * * * * 分别代表分钟、小时、日期、月份、星期几。