将容器测试托管到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报告

相关推荐
qq_19199971325 分钟前
Prometheus 和 Grafana 以进行服务器监控
运维
Ling_suu38 分钟前
Spring——提前编译
大数据·运维·spring
清水加冰40 分钟前
容器内的Jenkins使用docker部署服务,服务数据文件挂载问题
运维·docker·jenkins
枸杞配码42 分钟前
SpringBoot多环境+docker集成企业微信会话存档sdk
spring boot·docker·企业微信
龙仔72544 分钟前
麒麟系统下docker搭建jenkins
servlet·docker·jenkins
谢白羽1 小时前
docker与大模型(口语化原理和实操讲解)
运维·docker·容器
檀越剑指大厂1 小时前
【Docker系列】如何在 Docker 环境中部署和运行 One API
运维·docker·容器
清水加冰2 小时前
Jenkins + gitee 自动触发项目拉取部署(Webhook配置)
运维·gitee·jenkins
运维佬3 小时前
在Linux环境下部署TiDB可以通过几种不同的方法
linux·docker·tidb