将容器测试托管到Jenkins

设计思路

思路整理:

  1. 通过docker部署Jenkins

  2. 在Jenkins可以使用docker

  3. 自动化测试通过docker、docker-compose执行

  4. 测试后生成allure报告,在Jenkins中展示

难点:

  1. 如何在Jenkins执行docker指令

  2. 如何把容器中测试结果取回到Jenkins

1. 在Jenkins中执行docker

思路

方法一:在Jenkins中安装docker客户端,使用第三方的docker服务

方法二:在Jenkins中安装docker客户端,在另一个容器中安装docker服务

方法三:在Jenkins中不安装docker客户端,直接使用宿主机的docker

此处使用的处理方式是方法三

1. 添加启动参数

需要挂载的文件如下:

docker的客户端:/usr/bin/docker

docker客户端和服务端的通讯接口:/var/run/docker.sock

docker-compose:/usr/local/bin/docker-compose

启动Jenkins镜像:

XML 复制代码
docker run --name jenkins -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock -v /usr/local/bin/docker-compose:/usr/bin/docker-compose -u root -p 8120:8080 -d jenkins/jenkins:jdk11

命令详解
docker run 
--name jenkins                       # 容器名
-v /usr/bin/docker:/usr/bin/docker   # 文件映射
-v /var/run/docker.sock:/var/run/docker.sock 
-v /usr/local/bin/docker-compose:/usr/bin/docker-compose  
-u root                              # -u参数表示运行者的身份
-p 8120:8080                         # 端口映射
-d                                   # 后台运行
jenkins/jenkins:jdk11

2. 进入Jenkins容器,验证可以执行docker

进入Jenkins容器

XML 复制代码
docker exec -it jenkins bash

执行docker指令,确认可以执行

XML 复制代码
docker image ls -a
docker-compose

2. 从容器中取回allure测试结果

记: D:\A_pythonCode\Python\docker_compose_demo

注:这里我已经有了可以生成allure报告的自动化测试容器

注:若使用pytest框架的allure-pytest插件用来生allure报告,只需在pytest.ini文件中添加如下内容,不用添加--clean-alluredir(若添加,到后面的步骤可能会报错):

XML 复制代码
addopts = --alluredir=./temps

不需要如下内容(因为容器运行结束后会自动复原,无需进行清理)
addopts = --alluredir=./temps --clean-alluredir

思路

容器在执行测试之后,会将测试结果保存在/app/temps中(该文件名需要在pytest框架中自己设置)

但是容器在执行测试之后,会结束、销毁

方式一:让Jenkins容器和自动化测试容器,共用宿主机的文件,实现数据共享

方式二:Jenkins容器的文件夹直接挂载到自动化测试容器,实现数据共享

方式三:共用第三方存储服务

此处使用的方式是第一种

1. 重启Jenkins,挂载宿主机的目录

(1)新建一个myjenkins/jenkins_home目录,让其作为映射的目录

(2)删除之前启动的jenkins容器

XML 复制代码
docker rm -f jenkins

(3)重启jenkins容器

XML 复制代码
docker run --name jenkins -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock -v /usr/local/bin/docker-compose:/usr/bin/docker-compose -v /home/ubuntu/myjenkins/jenkins_home:/var/jenkins_home -u root -p 8120:8080 -d jenkins/jenkins:jdk11


docker run 
--name jenkins 
-v /usr/bin/docker:/usr/bin/docker 
-v /var/run/docker.sock:/var/run/docker.sock 
-v /usr/local/bin/docker-compose:/usr/bin/docker-compose 
-v /home/ubuntu/myjenkins/jenkins_home:/var/jenkins_home # 新增的文件映射
-u root 
-p 8120:8080 
-d 
jenkins/jenkins:jdk11

启动容器后查看myjenkins/jenkins_home目录,可以看到里面是存在内容的:

2. 重启自动化测试,挂载宿主机目录

(1)先在myjenkins/jenkins_home目录中新建一个名为allure-results的目录(可自拟名),用于映射文件(保存allure的测试结果)

XML 复制代码
sudo mkdir allure-results

(2)为这个目录添加权限

XML 复制代码
sudo chmod 777 /home/ubuntu/myjenkins/jenkins_home/allure-results/

(3)重启自动化测试容器,并为其挂载目录

XML 复制代码
docker run -v /home/ubuntu/myjenkins/jenkins_home/allure-results/:/app/temps/ -u root --rm allure_test:v1

命令详解
docker run
# /app/.temps是自动化测试容器存放allure报告内容的目录
-v /home/ubuntu/myjenkins/jenkins_home/allure-results/:/app/temps
--rm
allure_test:v1

现在我们完成了:

Jenkins容器 --> 主机 和 自动化测试容器 --> 主机

也就相当于完成了

Jenkins容器 --> 自动化测试容器

3. 在Jenkins中执行docker并生成allure

1. 在Jenkins中添加新的任务

访问服务器的8120端口(该端口是在前面启动Jenkins时设置的映射端口)

http://xxxxx:8120

此处的管理员密码可以通过查看Jenkins的日志获取

XML 复制代码
docker logs jenkins

然后选择插件,根据自己需要选即可(不放图了)

创建用户(自拟)

创建新项目

2. 在项目配置中添加shell脚本

在设置中添加如下内容:

下面的shell内容就是我们在重启自动化测试时执行的命令,但是关联的目录略有不同

XML 复制代码
mkdir -p allure-results && chmod 777 allure-results
docker run -v /home/ubuntu/myjenkins/jenkins_home/workspace/api_test_by_docker/allure-results/:/app/temps/ -u root --rm allure_test:v1

解析:

我们在重启自动化测试时的关联目录:

XML 复制代码
/home/ubuntu/myjenkins/jenkins_home/allure-results/

若继续使用此目录,则shell内容如下:

XML 复制代码
mkdir -p allure-results && chmod 777 allure-results
docker run -v /home/ubuntu/myjenkins/jenkins_home/allure-results/:/app/temps/ -u root --rm allure_test:v1

我们保存配置后,运行

然后查看控制台输出

可以看到构建的目录的位置和我们在命令里的目录是不同的

所以在docker run命令中的关联目录应该是上面红框里的jenkins的目录

其在Docker中的目录如下:

首先进入jenkins_home目录,然后如下图所示

最终得到的路径如下,也就是我们在命令中应该关联的docker目录:

XML 复制代码
/home/ubuntu/myjenkins/jenkins_home/workspace/api_test_by_docker/allureresults

使用此路经后再次执行,可以看到此路径下存在allure报告文件

3. 配置allure报告

(1)安装allure插件

(2)进入全局配置设置allure

(3)进入项目配置

里面的内容保持默认即可

执行任务、查看allure报告

相关推荐
全栈工程师修炼指南8 分钟前
Nginx | stream 四层反向代理:SSL、PREREAD 阶段模块指令浅析与实践
运维·网络·网络协议·nginx·ssl
Zfox_36 分钟前
CANN Catlass 算子模板库深度解析:高性能 GEMM 融合计算、Cube Unit Tiling 机制与编程范式实践
docker·云原生·容器·eureka
人间打气筒(Ada)1 小时前
jenkins基于Pipeline发布项目
java·pipeline·jenkins·流水线·ci·cd·cicd
威迪斯特1 小时前
CentOS图形化操作界面:理论解析与实践指南
linux·运维·centos·组件·图形化·桌面·xserver
一方热衷.1 小时前
在线安装对应版本NVIDIA驱动
linux·运维·服务器
独自归家的兔1 小时前
ubuntu系统安装dbswitch教程 - 备份本地数据到远程服务器
linux·运维·ubuntu
ONE_SIX_MIX1 小时前
ubuntu 24.04 用rdp连接,桌面黑屏问题,解决
linux·运维·ubuntu
龙飞051 小时前
Systemd -systemctl - journalctl 速查表:服务管理 + 日志排障
linux·运维·前端·chrome·systemctl·journalctl
春日见1 小时前
如何创建一个PR
运维·开发语言·windows·git·docker·容器
DARLING Zero two♡2 小时前
告别 Docker 命令行!Portainer+cpolar 让容器管理从局域网走向公网
运维·docker·容器