Jenkins持续集成

什么是持续集成?

开发人员将项目部署到测试环境(可能是虚拟机、Docker容器或云服务器),测试人员根据测试环境地址进行功能测试和自动化测试脚本开发,脚本通过Jenkins等工具执行,Jenkins先把代码拉取下来,进行自动化测试 ,并生成报告,以邮件的方式通知开发人员。目的就是在软件不断的迭代过程中,能快速的发现BUG。

jenkins帮测试人员我们做的事:jenkins检测到代码变化-拉取代码-编译-测试-生成测试报告-自动发送邮件(测试情况)。而我们只需要写代码、提交至代码托管平台、看邮件。

Windows本地使用Jenkins:

  1. 检查是否有java环境:
    Jenkins 本质是一个 Java Web 程序,所以需要 JDK。需要确保电脑上是否安装了Java环境。
shell 复制代码
java -version

显示java对应的版本信息,说明已有java环境。

  1. 下载jenkins.war(到官网下载即可),下载后放到D:\jenkins\jenkins.war路径下。
  1. 启动jenkins:

进入到cmd,路径直接就是D:\jenkins

看到Jenkins is fully up and running说明启动成功。

  1. 访问jenkins:

由于jenkins默认监听8080端口,所以在浏览器输入http://localhost:8080或http://127.0.0.1:8080即可访问。

首次启动Jenkins需要需要管理员密码。

  1. 后台运行jenkins:只有电脑关机、手动杀到该进程、系统资源严重不足才会停止jenkins服务。
shell 复制代码
start java -jar jenkins.war
1.创建Jenkins项目

然后进入到项目配置 :

2.项目配置
系统邮箱配置:

由于需要jenkins生成测试报告后,需要发送邮件,但是Jenkins没有发送邮件的功能,需要依靠SMTP服务来发送,所以需要认证SMTP服务。

点击主页"Manage Jenkins"按钮,找到 System Configuration 菜单下的System选项。

  1. 配置系统管理员邮箱地址。它不负责 SMTP 身份认证,做为发件人的邮箱。
  2. 配置 Extended E-mail Notification:
    SMTP身份验证,STMP可以理解为一个邮件发送的中转站。因为Jenkins 只是自动化构建和任务调度工具,它可以生成邮件内容,但要把邮件发送到其他邮箱,通常需要借助 SMTP 服务器。

添加SMTP认证证书:

  • 用户名:授权了SMTP服务的邮箱
  • 密码:SMTP 服务授权码。
    授权码作用:用于证明 Jenkins 有权限通过你的邮箱账号发送邮件。
    勾选了Use SSL,表示邮件是加密传输必须要将端口号改为465。而25号端口是明文连接。
  1. 配置 邮箱通知(可选):
    这里也要SMTP身份验证,与Extended E-mail Notification(扩展邮件通知)认证的SMTP服务一样。这里是负责基础邮件通知,而扩展邮件通知可以自定义构建邮件通知,邮件通知更加灵活;
    所以如果没有其他功能依赖邮件通知,可以不配置。
1)源码管理

2)构建步骤
Windows本地jenkins:

本该我们执行python脚本需要输入指令交给jenkins ,他帮我们执行。

源码管理和构建触发器这两步做完后,就能执行远程仓库中的代码了。

点击Build Now后,会立即运行脚本。

点击控制台输出,查看测试用例的执行情况。

云服务器上部署的jenkins:

构建步骤应选择"执行 shell"。因为Jenkins 部署在阿里云的 Linux 服务器上,所以需要选择 "执行 shell" 才能调用系统的原生命令来运行测试代码。

后面的一些配置就是设置执行脚本的运行时间和将执行脚本生成的测试报告以邮件发送到个人邮箱

3)构建触发器(什么时候启动流水线)
定期执行:

Jenkins 构建触发器(Build Triggers)中的 Cron 表达式规则:

复制代码
┌──────── 分钟 (0-59)
│ ┌────── 小时 (0-23)
│ │ ┌──── 日期 (1-31)
│ │ │ ┌── 月份 (1-12)
│ │ │ │ ┌ 星期 (0-7)
│ │ │ │ │
* * * * *       

例如 :30 8 * * *

表示:每天8:30执行流水线

符号 名称 作用 示例 含义
* 任意值 匹配所有时间 * * * * * 每分钟执行
, 枚举 指定多个时间 0 8,12,18 * * * 8点、12点、18点执行
- 范围 指定连续范围 0 9-17 * * * 9点到17点每小时执行
/ 间隔 指定执行间隔 */10 * * * * 每10分钟执行
H Hash(Jenkins特有) 自动分散任务执行时间 H 2 * * * 每天2点左右执行
H的大用处:
对于有多个服务器需要执行时,H就排上用场了,表示Jenkins 根据任务名称计算一个固定时间,不让服务器一起执行,降低服务器压力,达到负载均衡的作用。
还有:H/5 * * * *,表示每5分钟执行、H * * * *表示每小时执行。
Poll SCM:轮询

Jenkins轮询Gitee仓库的代码有没有变化,发送新的commit就会拉取代码执行,生成测试报告,并发送邮件。

表示每 5 分钟:检查代码,有变化就跑。

4)构建后操作
1.添加"可编辑的电子邮件通知"

发送邮件内容模版:

html 复制代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
</head>
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0">
<div>
    <h2>项目信息</h2>
    <ul>
        <li>项目名称: ${PROJECT_NAME}</li>
        <li>详细测试报告: <a href="${PROJECT_URL}allure/">${BUILD_URL}allure/</a></li>
        <li>触发原因: ${CAUSE}</li>
        <li>项目Url: <a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
    </ul>
    <hr/>
    <h2>构建日志</h2>
    <div>${JELLY_SCRIPT, template="html"}</div>
    <hr/>
</div>
</body>
</html>

其中的PROJECT_URL是系统配置的Jenkins URL。

这里设置的是局域网的IP地址,只有在同一个局域网下,才能访问到生成的测试报告。

点击Advanced Settings:

然后拉到最下:

2.添加"Allure"报告

配置完后,Jenkins主页就会出现一个构建好的任务。

企业中使用Jenkins的流程:

一般将 Jenkins 部署在独立服务器或者云服务器上,通过 Nginx 反向代理提供统一访问入口,使用域名访问 Jenkins。Jenkins 服务器配置固定 IP,内部通过 Git 仓库拉取代码,调用测试容器执行自动化测试,生成 Allure 测试报告后通过邮件或企业微信通知测试结果。大型项目会使用 Jenkins Master-Agent 架构,将任务分发到不同执行节点。

模拟企业Jenkins环境搭建与实践:

流程: Gitee Push → Webhook 通知 Jenkins → Git 拉取代码 → Python/pytest 执行测试 → Allure 生成报告 → Jenkins 邮件插件发送通知。

Jenkins 负责决定什么时候执行任务、从哪里拉取代码、按什么步骤执行,以及执行完成后如何处理结果;真正的代码拉取、测试运行和报告生成,则由 Jenkins 调用相应的工具,在配置好的执行环境中完成。

1)在云服务器上安装Jenkins:

Jenkins本质是一个Java应用,需要依赖Java环境,所以先安装 OpenJDK 21,再装Jenkins。

  1. 安装Open JDK 21
shell 复制代码
#1.
sudo apt update

#2.
sudo apt install fontconfig openjdk-21-jre -y

#3.检查是否安装好
java -version

#出现openjdk version "21..."即为安装成功。
  1. 安装Jenkins:
shell 复制代码
#1.
sudo wget -O /etc/apt/keyrings/jenkins-keyring.asc \  https://pkg.jenkins.io/debian-stable/jenkins.io-2026.key

#2.
echo "deb [signed-by=/etc/apt/keyrings/jenkins-keyring.asc]" \
https://pkg.jenkins.io/debian-stable binary/ | \
sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null

#3.
sudo apt update

#4.安装Jenkins
sudo apt install jenkins -y

安装的 Jenkins 的 Linux 包安装后会作为 systemd 服务运行。

shell 复制代码
# 启动Jenkins
sudo systemctl start jenkins

# 设置开机自启
sudo systemctl enable jenkins

# 查看启动状态
sudo systemctl status jenkins
#看到active,表示启动成功
#Active: active (running)
2)云服务器安全组放行8080端口:

放行后,访问http://47.xxx.xxx.xxx:8080,会进入到Jenkins初始化界面。

3)获取 Jenkins 初始密码:

Jenkins初始化界面需要填写初始化密码。在云服务上输入一下指令即可获取。

shell 复制代码
sudo cat /var/lib/jenkins/secrets/initialAdminPassword

然后将密码粘贴到Jenkins Web初始化密码处。即可进入到Jenkins

4)Jenkins上安装插件:
  • Git:因为Jenkins要拉取远程仓库代码,实际上是调用系统中安装的 Git 可执行文件,所以需要安装git插件;
  • Pipeline:编排构建流程时,需要使用到pip命令,下载测试项目中的requierments.txt测试环境依赖;
  • Gitee:因为是拉取Gitee远程仓库的代码,还有后续会用到Gitee webhook。
  • Allure:因为Jenkins拉取代码并执行后,最后会使用Allure生成测试报告。
  • Email Extension Plugin:因为最后生成测试报告后,会发送测试结果邮件,支持更灵活的邮件模板。
5)云服务器上需要安装的环境:

Jenkins Web 页面负责操作和调度,Linux 负责实际执行。

因为要先拉取代码,再执行自动化代码,且代码是Python脚本,所以需要Git、Python环境。

shell 复制代码
#安转Python环境
sudo apt update
 
#安装python及虚拟环境工具 
sudo apt install -y git python3 python3-pip python3-venv

#查看是否安装
git --version
python3 --version
pip3 --version

为什么需要虚拟环境工具?为了更好的做环境隔离,我们是将项目中requirements.txt中环境依赖下载到虚拟环境中的。所以是先创建虚拟环境,再pip requirements.txt到虚拟环境中。

对于UI自动化:

对于Selenium UI自动化测试,需要用到浏览器,但是项目环境依赖文件requirements.txt 和 Linux 上都没有浏览器,所以需要装Chromium 浏览器环境,并且云服务器没有桌面环境,因此脚本必须是无头模式运行(即不加载页面)。

  1. 安装官方 Google Chrome,要下载与Windows电脑上一样的版本。
shell 复制代码
# 下载官方稳定版 Chrome
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

# 安装 Chrome 及相关系统依赖
sudo apt update
sudo apt install -y ./google-chrome-stable_current_amd64.deb

# 验证安装
google-chrome --version
  1. 安装中文字体与图形依赖库
    Linux 云服务器默认没有中文字体,如果不装,无头浏览器渲染中文页面时会出现方块乱码,导致元素定位失效或截图为空白:
shell 复制代码
sudo apt install -y fonts-wqy-zenhei fonts-wqy-microhei libnss3 libgconf-2-4 libfontconfig1
  1. Python脚本配置
python 复制代码
Options.add_argument("--headless") # 开启无头模式

# === Linux 云服务器必须添加的核心参数 ===
Options.add_argument("--no-sandbox") # 禁用沙盒,解决服务器上权限导致崩溃的核心
Options.add_argument("--disable-dev-shm-usage") # 禁用 /dev/shm 内存共享,防止服务器内存不足崩溃
Options.add_argument("--disable-gpu") # 禁用 GPU 硬件加速
Options.add_argument("--window-size=1920,1080") # 设定无头分辨率,防止因默认分辨率过小导致元素折叠找不到
# ======================================

Options.add_argument("--disable-blink-features=AutomationControlled") # 绕过自动化检测
Options.add_experimental_option("excludeSwitches", ["enable-automation"]) # 移除控制提示条
6)Jenkins Web配置:

与Windows配置流程基本一样。

不同点:

在构建步骤那里不同,因为写的命令是跑在Linux上的。

这里使用 set -e,是为了让前面的命令一旦执行失败,构建脚本就立即停止,避免出现后续错误掩盖真正原因。

为了贴近企业实践,通过 Gitee Webhook 触发 Jenkins 自动构建。

Gitee Webhook:

什么是Webhook?

Gitee 主动通知 Jenkins,有新的代码提交了,请开始执行构建任务。

之前的做法是设置一个固定的时间,到了就执行构建,或则使用Poll SCM,每五分钟轮询,Gitee仓库中的代码有无变化,有变化就构建。

如何使用?

在Jenkins项目的配置中,Triggers选择Gitee webhook触发构建。

设置Gitee webhook配置:

复制 Jenkins 插件生成的 Webhook URL,并生成 Gitee Webhook 密码。

来到Jenkins要拉取的仓库下,在仓库的管理页面找到"Webhook",点击"添加webhook"。

填写Jenkins 插件生成的 Webhook URL和 Gitee Webhook 密码,最后点击"添加"。

最后真实的提交一下测试项目的代码,看看Jenkins是否会自动构建。

对于UI自动化测试在Linux上执行的问题:

因为在Linux执行是没有图形化界面的,容易出现元素挤在一起,导致元素定位不到。

解决: 固定视口大小、保存失败截图,并检查缺失字体的问题,观察Linux上的真实页面。

关于区分项目测试环境和测试脚本运行环境?

项目测试环境是运行一个被测试的项目所需要的软件依赖,而测试脚本运行环境是脚本运行所需要的软件依赖。

企业中是如何进行测试开发?

开发人员将项目部署到测试环境(可能是虚拟机、Docker容器或云服务器),测试人员根据测试环境地址进行功能测试和自动化测试脚本开发,脚本通过Jenkins等工具执行,并生成测试报告。

相关推荐
Initialize293082 小时前
Docker 容器网络不通?五步排查法
运维
重生之高冷汉堡包2 小时前
家庭住宅IP是什么?机房住宅与普通住宅有什么区别
运维·服务器·网络·网络协议·tcp/ip·用户运营
Thneonl2 小时前
git reset --hard 之后先别哭:reflog 里存着你刚弄丢的那个分支
运维·后端
见闻小天地2 小时前
液冷直流负载:AI 算力中心带载测试的关键设备
运维·业界资讯
迪康软件zz2 小时前
从 PHP 高危漏洞看纵深防御:资产盘点、补丁管理与端点防护实践
运维·安全·自动化运维
智能运维指南3 小时前
2026 年可观测平台选型对比:混合 IT 架构下企业运维监控产品怎么选
运维·可观测·嘉为蓝鲸·运维监控产品对比
Fnetlink13 小时前
Fnet 云网安 261023
运维·开发语言·网络·人工智能·安全·web安全·php
可爱系程序猿3 小时前
nvcuvid.dll 加载失败定位:CUDA 视频解码、驱动接口与进程位数逐项核查
运维·服务器·程序人生·电脑·音视频
郝亚军3 小时前
在win11上用openssl生成私钥、再从私钥导出公钥、...
linux·运维·服务器