Linux机器通过Docker-Compose安装Jenkins发送Allure报告

server/2024/9/20 7:18:14/ 标签: linux, centos, jenkins, python, Allure

目录

一、安装Docker

二、安装Docker Compose

三、准备测试用例

四、配置docker-compose.yml

五、启动Jenkins

Allure%E6%8F%92%E4%BB%B6-toc" style="margin-left:0px;">六、配置Jenkins和Allure插件

七、创建含pytest的Jenkins任务

八、项目结果通知

1.通过企业微信通知

2.通过邮件通知

九、配置域名DNS解析


最近小编接到一个任务用来监测和巡检网络入口是否正常,下面是我实现的思路图:

下面是我要实现的具体步骤:

一、安装Docker

在CentOS上,首先更新包管理工具并安装所需的包。

sudo yum update -y
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

接下来,添加Docker的官方仓库,然后安装Docker。

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io

在执行这步骤的时候可能会出现下载Docker不成功,我后面采用aliyun下载的并设置了自己的代理。

启动Docker服务,并设置为开机自启。

sudo systemctl start docker
sudo systemctl enable docker

二、安装Docker Compose

需要下载Docker Compose的当前稳定版本。检查Docker Compose GitHub仓库上的最新版本。

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

这里最开始下载存在问题,我是登录仓库后下载对应的文件后,通过scp命令上传到/usr/local/bin目录下,并重命名为docker-compose

chmod +x docker-compose-linux-x86_64mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose

验证安装是否成功。

docker-compose --version

三、准备测试用例

准备用pytest编写的测试用例。例如,创建一个简单的测试文件test_example.py

python"># test_example.pydef test_example():assert 1 == 1def test_example_fail():assert 1 == 2

四、配置docker-compose.yml

创建docker-compose.yml文件来定义Jenkins服务。此配置将Jenkins作为服务运行,并准备了用于持久化数据和与宿主机的Docker守护进程通信的卷。因为我需要用到python脚本,采用pytest框架,这里我构建了python镜像。

version: '3.9'
services:jenkins:image: jenkins/jenkins:ltscontainer_name: jenkinsnetwork_mode: "host"user: rootrestart: alwaysvolumes:- /var/run/docker.sock:/var/run/docker.sock- /root/compose/jenkins/jenkins_data:/var/jenkins_home- /root/compose/jenkins/pythonProject:/var/jenkins_home/pythonProject- /root/compose/jenkins/apache-maven-3.9.8:/usr/local/apache-maven/apache-maven-3.9.8- /root/compose/jenkins/jdk-11.0.23:/usr/local/jdk-11.0.23- /root/compose/jenkins/conf/profile:/root/.bashrcenvironment:- TZ=Asia/Shanghaipython:image: python:3.10container_name: pythonvolumes:- /root/compose/jenkins/pythonProject:/usr/srcworking_dir: /usr/srccommand: bash -c "pip install -r requirements.txt && tail -f /dev/null"

五、启动Jenkins

运行以下命令在后台启动Jenkins服务:

docker-compose up -d

 我配置了portainer可视化界面,可看到启动后的镜像信息:

Allure%E6%8F%92%E4%BB%B6">六、配置Jenkins和Allure插件

1.访问http:<机器名称>:8080进行Jenkins的初始化配置。

2.安装Allure Jenkins插件:进入管理--》插件管理,在“可选插件”标签页搜索“Allure Jenkins Plugin”进行安装。

3.重启Jenkins以应用安装的插件。

七、创建含pytest的Jenkins任务

1.在Jenkins中创建一个新的“自由风格的软件项目”。

2.在“源代码管理”部分,配置你的项目库(如果你的测试用例放在Git等版本控制系统中)。

3.在“构建”部分,添加“执行shell”步骤,填写命令来安装pytest和allure-pytest,并执行测试用例。

python3 -m ensurepip --upgrade  # 确保pip3安装/更新
pip3 install pytest
pip3 install allure-pytest
python3 -m pytest --alluredir=allure-results test_example.py

后续网络入口特别多的情况下,执行一次会耗时2h,时间成本太高,修改shell语句:

cd /var/jenkins_home/pythonProject
#可以先安装pytest-xdist插件
pip3 install pytest-xdist
#通过requirements.txt文件包含全部的依赖插件
pip3 freeze > requirements.txt#上面两个步骤可以提前在jenkins容器内执行,这里可不执行pytest -n 8 test_redirects.py --alluredir "allure-results" --clean-alluredir

jenkins任务并查看allure报告">4.运行Jenkins任务并查看Allure报告

但是最开始这里执行会报错,pip和python不存在,采用新的方式在docker容器内下载python3

首先以root用户权限进入到jenkins容器内:

docker exec -itu root jenkins /bin/bash

 执行命令:

apt-get update
#直接容器中安装 wget 
apt install -y wget#先安装依赖
apt  -y install gcc automake autoconf libtool make
apt -y install make*
apt  -y install zlib*
apt -y install openssl libssl-dev
apt  install -y build-essential
apt  install sudo
sudo apt-get update
sudo apt-get install build-essential python-dev python-setuptools python-pip python-smbus
sudo apt-get install build-essential libncursesw5-dev libgdbm-dev libc6-dev
sudo apt-get install zlib1g-dev libsqlite3-dev tk-dev
sudo apt-get install libssl-dev openssl
sudo apt-get install libffi-dev
sudo apt-get install libxpm-dev libxext-dev 
sudo apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libsqlite3-dev #下载python
wget https://www.python.org/ftp/python/3.12.1/Python-3.12.1.tgz#解压下载的python包
tar -zvxf Python-3.12.1.tgz#进入目录
cd /var/jenkins_home#修改目录名称
mv Python-3.12.1 python3#进入到python3目录
cd python3#执行命令
./configure --prefix=/var/jenkins_home/python3#make编译安装
./configure --prefix=/var/jenkins_home/python3 --with-ssl#这时候可能会提示执行命令:
./configure --enable-optimizations
make
make install#添加python3软链接
which python3ln -s /var/jenkins_home/python3/bin/python3.12 /usr/local/bin/python3#添加pip3软链接
ln -s /var/jenkins_home/python3/bin/pip3 /usr/local/bin/pip3#检查是否安装成功
python3 --version
pip3 --version

运行刚刚配置的Jenkins任务。构建完成后,Jenkins将会显示一个“Allure报告”的链接,点击它即可查看详细的测试报告。

通过上述步骤就可以在CentOS系统上,通过docker-compose安装Jenkins,并通过Jenkins运行pytest编写的Python测试用例,并生成Allure测试报告了。

八、项目结果通知

1.通过企业微信通知

可在“执行shell”中加入语句:

curl https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=yourkey \-H 'Content-Type: application/json' \-d '{"msgtype": "markdown","markdown": {"content": "# 基建消防队 <font color=\"warning\"></font>\n> ### 级别状态: <font color=\"green\">S1 Recovered</font>\n> ### 规则标题: <font color=\"comment\">监控对象失联</font>\n> ### 规则备注: <font color=\"comment\">检查categraf到n9e链路是否正常</font>\n> ### 负责人: <font color=\"comment\">@xxx</font>\n> [查看详细报告](填写报告链接地址)"},"mentioned_list":["@all"]}'

在后面监测过程中想要报告展示的信息更全面,包含总测试案例、通过案例和通过率等字段的展示,可以更直观的看出报告详情。为了实现此功能,首先编写了python测试脚本result.py:

python">import json#需注意这里的地址一定是容器内的地址!
with open('/path/to/report/directory/widgets/summary.json', 'r') as f:summary = json.load(f)total_cases = summary['statistic']['total']
passed_cases = summary['statistic']['passed']
pass_rate = passed_cases / total_cases * 100print(f"总测试案例:{total_cases}")
print(f"通过案例:{passed_cases}")
print(f"通过率:{pass_rate:.2f}%")

其次在构建项目中修改原有的"执行shell"脚本,这是我第一次写的脚本

# 运行Python脚本,捕获输出
output=$(python /var/jenkins_home/pythonProject/result.py)# 使用curl发送企业微信消息
curl https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=yourkey \-H 'Content-Type: application/json' \-d '{"msgtype": "markdown","markdown": {"content": "# 基建消防队 <font color=\"warning\"></font>\n> ### 级别状态: <font color=\"green\">S1 Recovered</font>\n> ### 规则标题: <font color=\"comment\">网络入口监测</font>\n> ### 规则备注: <font color=\"comment\">检查网络入口是否正常通信</font>\n> ### 负责人: <font color=\"comment\">@xxx/font>\n> ### 报告详情: <font color=\"comment\">'$output'</font>> [查看详细报告](填写你的报告链接地址)"},"mentioned_list":["@all"]}'

上述脚本执行项目后在群里发送的样式为:

 

实在是太丑了,有没有!!

后面为了优化此报告,经历了不断的修改,最后给出正确的代码!

修改result.py脚本内容为:

python">import jsonreport_path = '/var/jenkins_home/pythonProject/allure-report/widgets/summary.json'
with open(report_path, 'r') as f:summary = json.load(f)total_cases = summary['statistic']['total']
passed_cases = summary['statistic']['passed']
pass_rate = passed_cases / total_cases * 100# 构建markdown格式的消息
markdown_message = f"""
> ### 总测试案例:<font color=\\\"orange\\\">{total_cases}</font>
> ### 通过案例:<font color=\\\"green\\\">{passed_cases}</font>
> ### 通过率:<font color=\\\"green\\\">{pass_rate:.2f}%</font>
"""print(markdown_message.strip())

 修改shell脚本内容为:

# 运行Python脚本,捕获输出
output=$(python /var/jenkins_home/pythonProject/result.py)# 使用curl发送企业微信消息,注意在此处使用双引号以允许变量展开
curl https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=yourkey \-H 'Content-Type: application/json' \-d "{\"msgtype\": \"markdown\",\"markdown\": {\"content\": \"# 基建消防队 <font color=\\\"warning\\\"></font>> ### 级别状态: <font color=\\\"red\\\">S1 Recovered</font>> ### 规则标题: <font color=\\\"comment\\\">网络入口监测</font>> ### 规则备注: <font color=\\\"comment\\\">检查网络入口是否正常通信</font>> ### 负责人: <font color=\\\"comment\\\">@xxx</font>> ${output}> [查看详细报告](填写你的报告链接地址)\"},\"mentioned_list\":[\"@all\"]}"

 

这样报告明显好看多了呢~ 

后面接口越来越多的情况下,有些接口第一次调用是失败的,但是发现当有测试case执行失败时,竟然影响到了整个项目的构建结果,这个肯定是不合理的。需要修改shell脚本解决此问题:

cd /var/jenkins_home/pythonProjectpytest -v -n 8 test_networkMonitor.py --alluredir "allure-results" --clean-alluredir || true

加入“|| true”判断会保证,不管pytest结果如何,脚本的执行都会继续进行,从而避免因测试失败而影响到最后的构建结果。 

2.通过邮件通知

(1)系统管理-->全局凭据配置-->设置发送邮件的用户名和密码作为全局凭据

(2)系统管理-->系统设置-->Extended E-mail Notification-->设置相关参数

 (3)系统管理-->系统设置-->邮件通知-->设置相应参数

(4)你的项目-->构建后操作-->Editable Email Notification-->设置相应参数

 这样就可以实现邮件发送啦~


九、配置域名DNS解析

最开始的思路是通过部署nginx,编写了docker-compose.yml文件

version: '3.9'
services:jenkins:image: jenkins/jenkins:ltscontainer_name: jenkinsnetwork_mode: "host"user: rootrestart: alwaysvolumes:- /var/run/docker.sock:/var/run/docker.sock- /root/compose/jenkins/jenkins_data:/var/jenkins_home- /root/compose/jenkins/pythonProject:/var/jenkins_home/pythonProject- /root/compose/jenkins/apache-maven-3.9.8:/usr/local/apache-maven/apache-maven-3.9.8- /root/compose/jenkins/jdk-11.0.23:/usr/local/jdk-11.0.23- /root/compose/jenkins/conf/profile:/root/.bashrcenvironment:- TZ=Asia/Shanghainginx:image: nginxcontainer_name: nginxrestart: alwaysuser: rootports:- "80:80"volumes:- /root/compose/jenkins/nginx:/etc/nginx/conf.ddepends_on:- jenkins

在/root/compose/jenkins/nginx下新增nginx.conf文件,文件内容:

server {listen 80;server_name 你想要解析的域名;location / {proxy_pass http://你的机器IP:8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}

nginx启动之后,输入全新的域名就可以登录了

后续方案升级,端口转发交给docker,域名解析交给运维,不在需要nginx,最终的docker-compose.yml修改为:

version: '3.9'
services:jenkins:image: jenkins-terra:ltscontainer_name: jenkinsuser: rootrestart: alwaysvolumes:- /var/run/docker.sock:/var/run/docker.sock- /root/compose/jenkins/jenkins_data:/var/jenkins_home- /root/compose/jenkins/pythonProject:/var/jenkins_home/pythonProject- /root/compose/jenkins/apache-maven-3.9.8:/usr/local/apache-maven/apache-maven-3.9.8- /root/compose/jenkins/jdk-11.0.23:/usr/local/jdk-11.0.23- /root/compose/jenkins/conf/profile:/root/.bashrcenvironment:- TZ=Asia/Shanghaiports:- "80:8080"

你学废了吗?


http://www.ppmy.cn/server/50110.html

相关文章

聊聊语法糖

语法糖&#xff08;Syntactic sugar&#xff09;是指编程语言中添加的某种语法&#xff0c;这种语法对语言的功能没有影响&#xff0c;但更方便程序员使用&#xff0c;并能增加程序的可读性&#xff0c;减少代码出错的机会。 历史&#xff1a; 语法糖这一术语是由英国计算机科…

elementui写一个自定义的rangeInput的组件

组件定义 使用el-row确保元素都在一行上对外暴露的prop是minValue和maxValue&#xff0c;但是不建议直接使用&#xff0c;使用计算属性minValueComputed和maxValueComputed更改计算属性的值的不要直接更改计算属性&#xff0c;也不要直接更改原本的prop&#xff0c;通知外层的父…

基于Matlab的细胞计数图像处理系统(GUI界面有报告) 【含Matlab源码 MX_003期】

简介&#xff1a; 本文旨在解决生物血细胞数目统计的挑战&#xff0c;提出了基于图像处理的综合方案。通过MATLAB平台&#xff0c;我们设计并实现了一套完整的细胞图像处理与分析流程。在预处理阶段&#xff0c;采用图像增强和阈值分割等方法&#xff0c;有效地提高了细胞图像的…

隐私计算和机密计算的区别

隐私计算和机密计算都是为了在处理数据时保护数据的安全和隐私&#xff0c;但它们在实现方式和应用场景上有所不同。 隐私计算 (Privacy Computing) 隐私计算主要关注在数据分析和处理过程中如何保护数据的隐私。它的核心目标是确保数据在使用过程中不被泄露&#xff0c;特别…

Spring boot 注解实现幂等性

1. 添加 Spring AOP 依赖 在 pom.xml 中添加如下依赖&#xff1a; <dependencies><!-- Spring AOP dependency --><dependency><groupIdorg.springframework.boot</groupId><artifactIdspring-boot-starter-aop</artifactId></depend…

视频云沉浸式音视频技术能力探索与建设

概述 随着传输技术、显示技术与算力的持续提升&#xff0c;用户对于音视频体验的需求在提高&#xff0c;各家设备厂商也在探索和推出对应的技术与产品。打造空间感的空间视频与空间音频是其中最为关键的2项技术&#xff0c;bilibili视频云在这两项技术领域也进行了相关代探索与…

单目物体测距

单目测距是一种利用单个摄像头来获取场景深度信息的技术。根据搜索结果,以下是一些常见的单目测距方法: 1. **相似三角形法**:这是一种基于几何原理的方法,通过已知物体的尺寸和在图像中的像素宽度来计算物体与相机之间的距离。 2. **基于已知运动的测量方法**:这种方法…

国家商用密码算法-SM4Tool.jar

SM4Tool.jar是指一个特定的Java工具集&#xff0c;用于实现SM4&#xff08;国家商用密码算法之一&#xff09;的加密和解密功能。SM4是一种分组密码算法&#xff0c;广泛应用于中国的各种安全通信场景中&#xff0c;如金融、电子政务、物联网等。 功能 加密与解密&#xff1a;…

PostgreSQL源码分析——WAL日志(二)

接上篇&#xff1a;《PostgreSQL源码分析——WAL日志&#xff08;一&#xff09;》 日志的组成 日志的注册主要是将WAL日志所需的信息保存在内存中&#xff0c;这些信息需要由XLogRecordAssemble函数组装成为最终的日志记录&#xff0c;主要是处理日志记录中与页面&#xff0…

Bureau of Contacts延迟高、卡顿、无法联机怎么办?

Bureau of Contacts是一款最多支持四个人联机玩的恐怖游戏&#xff0c;由MIROWIN开发并发行&#xff0c;6月20日在steam推出抢先体验版&#xff0c;相信喜欢恐怖游戏的玩家已经等不及了。玩家会扮演一名特工&#xff0c;接触并调查超自然现象&#xff0c;游戏分为调查和驱魔两个…

大话设计模式解读03-装饰模式

本篇文章&#xff0c;来解读《大话设计模式》的第6章——装饰模式。并通过C代码实现实例代码的功能。 注&#xff1a;第3~6章讲的是设计模式中的一些原则&#xff08;第3章&#xff1a;单一职责原则&#xff1b;第4章&#xff1a;开放-封闭原则&#xff1b;第5章&#xff1a;依…

Java Web防止同一用户同时登录实现方式

在Java Web应用中防止用户重复登录&#xff0c;主要是通过维护用户的会话状态来实现。 以下是几种常见的实现方式&#xff1a; 1. 使用Session 最直接的方式是利用HTTP Session。 当用户登录成功后&#xff0c;服务器为其创建一个唯一的Session&#xff0c;并将用户信息保存在…

Springboot整合阿里云ONS RocketMq(4.0 http)

1. 引入依赖 <!--阿里云ons&#xff0c;方便的接入到云服务--> <dependency><groupId>com.aliyun.openservices</groupId><artifactId>ons-client</artifactId><version>1.8.4.Final</version> </dependency>2. 配置 配…

Linux系统mysql数据库备份和还原操作

Linux系统mysql数据库备份和还原操作 1、数据备份命令 &#xff08;1&#xff09;备份单个数据库 mysqldump -u username -p test>/home/bak/test20230708.sqlusername&#xff1a;表示数据库用户名称&#xff1b; test&#xff1a;是需要备份的数据库名称&#xff1b; 右…

vscode字符多行自动增长插件。

多行字符自动增长插件CharAutoIncre 当你使用shiftalt选中了多行,并输入了’1’,这时这几行都变成了’1’. 这时你可以选中&#xff08;shift左键&#xff09;为’1’的这几行, 接下来按下shiftaltq此时’1’变为了’12345’自增长的样式。 同时本插件支持字符’a-z,A-Z’。 目…

Adobe Bridge简体中文版软件下载与安装(附保姆级教程)

Adobe Bridge常常被简称为BR&#xff0c;它是一款功能强大的看图选图软件&#xff0c;也是Adobe系列软件之一。BR可以与PS、ACR等无缝衔接&#xff0c;针对市面上几乎所有格式的图片&#xff0c;打通“看图--选图--修图”三个环节&#xff0c;更为流畅完整。除此之外&#xff0…

第十站:Java白——测试与调试的艺术

JUnit作为单元测试的首选工具&#xff0c;帮助开发者确保每个模块按预期工作。Mockito等模拟框架则使得复杂系统中的隔离测试成为可能。而集成开发环境&#xff08;IDE&#xff09;如IntelliJ IDEA&#xff0c;凭借其强大的代码分析、调试和重构功能&#xff0c;成为Java开发者…

Git 查看当前分支是基于哪个分支拉取(源头分支)

场景&#xff1a; 项目中使用 Git 管理代码仓库的时候&#xff0c;随着项目的持续迭代及项目的扩展&#xff0c;多版本并行开发是非常常见的事情&#xff0c;多版本并行开发就伴随着多分支&#xff0c;随着 Git 的分支越拉越多&#xff0c;这时候很容易造成分支的混乱&#xf…

内容安全复习 2 - 网络信息内容的获取与表示

文章目录 信息内容的获取网络信息内容的类型网络媒体信息获取方法 信息内容的表示视觉信息视觉特征表达文本特征表达音频特征表达 信息内容的获取 网络信息内容的类型 网络媒体信息 传统意义上的互联网网站公开发布信息&#xff0c;网络用户通常可以基于网络浏览器获得。网络…

ZYNQ7 Processing System IP核中PS侧Uart的用法

在ZYNQ7 Processing System IP核中集成的UART控制器是一个中全双工异步接收器和发送器&#xff0c;支持广泛的可编程波特率和I/O信号格式&#xff0c;可以适应自动奇偶校验生成和多主机检测模式。 UART操作由配置和模式寄存器控制。使用状态寄存器、中断状态寄存器和调制解调器…