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

news2024/11/27 14:27:54

目录

一、安装Docker

二、安装Docker Compose

三、准备测试用例

四、配置docker-compose.yml

五、启动Jenkins

六、配置Jenkins和Allure插件

七、创建含pytest的Jenkins任务

八、项目结果通知

1.通过企业微信通知

 2.通过邮件通知


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

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

一、安装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_64

mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose

验证安装是否成功。

docker-compose --version

三、准备测试用例

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

# test_example.py

def test_example():
    assert 1 == 1

def 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:lts
    container_name: jenkins
    network_mode: "host"
    user: root
    restart: always
    volumes:
      - /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/.bashrc
    environment:
      - TZ=Asia/Shanghai


  python:
    image: python:3.10
    container_name: python
    volumes:
      - /root/compose/jenkins/pythonProject:/usr/src
    working_dir: /usr/src
    command: bash -c "pip install -r requirements.txt && tail -f /dev/null"

五、启动Jenkins

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

docker-compose up -d

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

六、配置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

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 python3

ln -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:

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 * 100

print(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脚本内容为:

import json

report_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/pythonProject

pytest -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-->设置相应参数

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


你学废了吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1845173.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

win10手动安装stable-diffusion-webui

目录 1.python下载安装 2.git下载安装 3.stable-diffusion-webui下载 4.安装s-d-webui的依赖包&#xff08;用国内镜像提速&#xff09; 5.git下载的stable-diffusion-webui&#xff0c;依赖包提示已安装&#xff0c;但运行webui-user.bat后&#xff0c;又开始下载 6.修…

YOLOv10改进 | Neck | 添加双向特征金字塔BiFPN【含二次独家创新】

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录&#xff1a;《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有40篇内容&#xff0c;内含各种Head检测头、损失函数Loss、B…

教你使用Python玩转MySQL数据库,大数据导入不再是难题!

数据分析离不开数据库&#xff0c;如何使用python连接MySQL数据库&#xff0c;并进行增删改查操作呢&#xff1f; 我们还会遇到需要将大批量数据导入数据库的情况&#xff0c;又该如何使用Python进行大数据的高效导入呢&#xff1f; 本文会一一讲解&#xff0c;并配合代码和实…

疯狂刷题python版 | 使用PySide6自制刷题软件【源码+解析】

疯狂刷题python版 | 使用PySide6自制刷题软件【源码解析】 一、前言二、思考三、软件设计四、软件实现&#xff08;一&#xff09;使用QWebEngineView控件通过JavaScript代码和chrome内核进行数据交互和逻辑控制&#xff08;二&#xff09;用户分别通过浏览器 GUI和PySide6 GUI…

秋招突击——6/19——复习{(单调队列优化)——最大子序列和,背包问题——宠物小精灵收服问题}——新作{两两交换链表中的节点}

文章目录 引言复习单调队列优化——最大子序列和思路分析实现代码参考实现 背包问题——宠物小精灵的收服问题个人实现参考实现 新作两两交换链表中的节点个人实现参考实现 删除有序数组中的重复项个人实现知识补全迭代器的访问和控制vector删除特定的元素erasevector底层删除元…

15-JS封装:入口函数

目录 1 模块化的基本结构 2 编写封装里的jQuery函数 2.1 对象本身上添加css方法 2.2 对象原型上添加css方法 2.3 自定义构造函数 2.4 优化1-伪数组 2.5 优化2-原型链 2.6 简化代码 需求&#xff1a;给页面中所有的div设置字体颜色为红色 jQuery封装&#xff1a;$("…

1964springboot VUE 智慧社区可视化平台系统开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot VUE社区可视化平台系统是一套完善的完整信息管理类型系统&#xff0c;结合springboot框架和VUE完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码…

INFINI Labs 助力开源与教育:免费许可证计划全面升级

在数字化浪潮席卷全球的今天&#xff0c;INFINI Labs 深刻认识到开源项目和教育机构在技术创新与人才培养中的核心作用。因此&#xff0c;我们郑重推出全新升级的免费许可证计划&#xff0c;旨在全球范围内为开源社区和教育界提供有力支持&#xff0c;共同推动软件生态的繁荣与…

策略模式编程

接口定义&#xff1a; public interface ProcessParserStrategy { List<ProcessInfo> parser(String osType, String processInfo); String getApp(); } public interface ConfigParserStrategy { List<ConfigInfo> parser(String configInfo); String getConfigT…

DC/AC电源模块:为通信设备提供稳定的电力供应

BOSHIDA DC/AC电源模块&#xff1a;为通信设备提供稳定的电力供应 在现代通信系统中&#xff0c;稳定可靠的电力供应是确保信息传输连续性和服务质量的关键因素之一。DC/AC电源模块作为通信设备能源管理的核心组件&#xff0c;扮演着至关重要的角色。它不仅负责将输入的直流电…

Spring自定义标签体系和应用

我们知道&#xff0c;在使用Dubbo框架时&#xff0c;需要指定配置文件中的application、protocol、registry、provider、service等服务器端和客户端的配置项&#xff0c;典型的配置方法如下所示。通过这些配置项&#xff0c;我们可以基于Spring容器来启动Dubbo服务。 <!-- …

pytorch lighting: Trying to resize storage that is not resizable

问题 在用pytorch lighting进行训练时碰到如下错误 即 Trying to resize storage that is not resizable 。 解决方案 在dataloader采样图片以及label时&#xff0c;保证每次采样的图片的分辨率不变。

抖去推,筷子剪辑,超级编导短视频矩阵系统,应该怎么选择?

选择一个适合您需求的软件平台&#xff0c;然后按照以下步骤进行选择&#xff1a; 研究和比较不同平台&#xff1a;比较不同的短视频编辑软件&#xff0c;例如抖音、快手等&#xff0c;看看它们提供了哪些功能和特点。 确定需求&#xff1a;确定您希望在短视频中实现的功能和效…

每天写java到期末考试(6.21)--集合4--练习--6.20

练习1&#xff1a; 正常写集合 bool类 代码&#xff1a; import QM_Fx.Student;import java.util.ArrayList;public class test {public static void main(String[] args) {ArrayList<Student> listnew ArrayList<>();//2.创建学生对象Student s1new Student(&quo…

C语言 | Leetcode C语言题解之第169题多数元素

题目&#xff1a; 题解&#xff1a; int majorityElement(int* nums, int numsSize) {int ans 0;for (int i 0, cnts 0; i < numsSize; i) {if (nums[i] ans) {cnts;} else if (cnts 0) {ans nums[i];} else {cnts--;}}return ans; }

python逆序输出IP地址 青少年编程电子学会python编程等级考试三级真题解析2021年12月

python逆序输出IP地址 2021年12月 python编程等级考试级编程题 一、题目要求 1、编程实现 请读取文件IP.txt的数据&#xff0c;数据内容如下图显示&#xff0c;文件中每一行存储一个P地址&#xff0c;下列代码实现了读取数据&#xff0c;每次读取一行数据&#xff0c;都删除…

HTTP详细总结

概念 HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则。 特点 基于TCP协议: 面向连接&#xff0c;安全 TCP是一种面向连接的(建立连接之前是需要经过三次握手)、可靠的、基于字节流的传输层通信协议&#xff0c;在…

驾校OBD接入CAN总线数据大众朗逸仪表网关位置

在汽车的复杂电路网络中&#xff0c;仪表网关扮演着信息枢纽的角色。对于驾校使用大众朗逸车主而言&#xff0c;了解仪表网关的位置不仅有助于日常维护&#xff0c;更是故障诊断和车辆升级的关键所在。 大众朗逸作为一款深受消费者喜爱的车型&#xff0c;凭借其稳定的性能和经…

基于SSM+Jsp的水果销售管理网站

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

BirdTalk IM集群中消息流转策略讨论

BirdTalk IM集群中消息流转策略讨论 目前群聊的存储策略是1写多读方案&#xff1b;每个群组一个队列&#xff0c;按时间顺序排列&#xff0c;不区分用户&#xff1b; 私聊的存储是写扩散的&#xff0c;每个人都有自己的消息队列&#xff0c;按时间顺序 保存所有的消息&#x…