设计思路
思路整理:
-
通过docker部署Jenkins
-
在Jenkins可以使用docker
-
自动化测试通过docker、docker-compose执行
-
测试后生成allure报告,在Jenkins中展示
难点:
-
如何在Jenkins执行docker指令
-
如何把容器中测试结果取回到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时设置的映射端口)
此处的管理员密码可以通过查看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报告