Docker上搭建Pytest+Allure+Jenkins接口自动化环境

需求:在XX公司服务器Docker上搭建接口自动化环境,使用Jenkins每天定时运行 并将报告发生公司 飞书/钉钉群。但是目前遇到这样的一个问题,在服务器上部署了docker环境,然后安装了Jenkins容器 ,最后从git上拉取代码后 发现 代码在jenkins容器的目录当中,jenkins运行代码就必须要进入容器当中运行,这样是不可能的。

目前我想到 3 个方法去实现:
(1)启动jenkins容器时 将容器的目录挂载到宿主机目录上去执行(方法不能实现)pass
(2)在jenkins上创建本地节点,将代码拉取到本地 然后去运行本地项目(可以实现,局限性小)pass
(3)重新封装jenkins镜像,在jenkins镜像中安装自动化所需要的环境 在容器中执行项目(步骤虽麻烦,但一次封装后续永久使用)

Pytest+Allure+Jenkins自动化环境

  • 一 、安装Docker
  • 二、Docker上安装Jenkins
    • 2.1 启动jenkins
  • 三、Jenkins容器安装自动化环境
    • 3.1 安装python3环境
    • 3.2 安装python3所需要的三方库
    • 3.2 Jenkins及项目配置

一 、安装Docker

docker容器基本操作:直达

服务器上输入 docker -v 查看是否已安装
没有安装docker的同学 安装Docker

二、Docker上安装Jenkins

文章末尾直接提供封装好的镜像下载
Docker上搭建Pytest+Allure+Jenkins接口自动化环境_第1张图片

1.查找docker上的镜像
	docker search jenkins
  
2.下载自己所需要的镜像
	docker pull jenkinsci/blueocean
  
3.查看是否下载成功
	docker images
  
4.启动下载的jenkins镜像
  docker run -d -p 10240:8080 -p 10241:50000 --restart=always -v /Users/songpeilun/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime  -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai --name jenkins jenkins/blueocean
 
说明:
	docker run	运行
	-d:后台运行容器
  	-p:指定容器的端口映射 -p 10240:8080  # 将容器的8080端口映射到宿主机的10240端口上 ,映射多个端口使用 -p 8082:8080  -p 8083:8081
  	--restart=always:自动重启	#服务挂掉后下次自动重启
    -v:挂载宿主机目录和docker容器中的目录  
    	/Users/songpeilun/jenkins_home 	# 本地宿主机绝对目录
    	/var/jenkins_home	# 容器目录(将容器目录挂载到本地)
    -v:/etc/localtime:/etc/localtime  # 本地时间和容器时间同步
    -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai 	 # 设置容器时间为上海时间(不然容器时间和本地时间相差8小时)
      --name jenkint_test  # 设置容器的名称
      jenkinsci/blueocean	# 选择镜像名称启动容器(默认镜像后面会加latest  如果拉取自己创建的镜像后面要加自己的版本号)

!!容器目录挂载本地目录时 一定要给本地文件夹赋予权限  chmod 777 jenkins_home

2.1 启动jenkins

浏览器访问 http://localhost/:10240 如果无法访问请关闭系统防火墙
密码存放在 cat /var/jenkins_home/secrets/initialAdminPassword

Docker上搭建Pytest+Allure+Jenkins接口自动化环境_第2张图片

三、Jenkins容器安装自动化环境

jenkins容器 使用git拉取代码后 默认是放在容器当中的/var/jenkins_home/workspace/autotest 无法正常运行代码。
Docker上搭建Pytest+Allure+Jenkins接口自动化环境_第3张图片
在jenkins容器中安装python相关环境 就可以完美解决该问题。当然也可以在jenkins中创建宿主机 把代码映射到本地 然后在本地执行。但是这样做相当于电脑当做服务器 每次运行自动化之前都需要打开电脑。(我之前就是这么干的,局限性太小)

1.首先根据容器id进入容器内部

docker exec -itu root 容器id /bin/sh

weget 安装(不推荐,基本和现安装的方法差不多,先要安装一些依赖包,如 gcc 等)
apk add 安装(此版本是alpine :apk add,能够快速安装完成)

2.最后注意系统版本问题:

如果是 centos 那即是 yum
如果是 ubuntu 那即是 apt-get
如果是 alpine 那即是 apk

3.1 安装python3环境

  1. alpine系统使用apk命令安装
cd /etc/apk/
echo "https://mirrors.ustc.edu.cn/alpine/v3.6/main/" > repositories
echo "https://mirrors.ustc.edu.cn/alpine/v3.6/community/" >> repositories

Docker上搭建Pytest+Allure+Jenkins接口自动化环境_第4张图片

  1. 更新 apk 源:apk update
apk update

Docker上搭建Pytest+Allure+Jenkins接口自动化环境_第5张图片

  1. 输入 apk add python3 安装python环境
apk add python3
  1. 更新pip3:pip3 install --upgrade pip
pip3 install --upgrade pip

# 验证python环境
python3 -V
pip3 -V

3.2 安装python3所需要的三方库

1.上传allure压缩包到容器当中

# 从宿主机拷贝文件到容器当中
	docker cp /Users/songpeilun/allure-2.13.0.zip 5183549dcdb6:/
说明:
	/Users/songpeilun/allure-2.13.0.zip	# 宿主机文件全路径
	1c9a4d73d8f5:/zh_work  # 容器id:容器的目录

# 解压缩
unzip allure-2.13.0.zip # 文件名

2.安装

pip3 install base64-test0926==1.0.0
pip3 install PyMySQL==1.0.2
pip3 install pytest==6.2.3
pip3 install python-jenkins==1.7.0
pip3 install redis==3.5.3
pip3 install requests==2.25.1
pip3 install SQLAlchemy==1.4.10
pip3 install urllib3==1.26.4
pip3 install xlrd==1.2.0
pip3 install PyYAML==6.0
pip3 install selenium==3.141.0
pip3 install Flask==2.0.2
pip3 install Flask-BasicAuth==0.2.0
pip3 install Flask-Cors==3.0.10
pip3 install Flask-HTTPAuth==4.5.0
pip3 install Flask-Migrate==2.7.0
pip3 install Flask-Script==2.0.6
pip3 install Flask-SQLAlchemy==2.5.1
pip3 install allure-pytest==2.8.40
pip3 install allure-python-commons==2.8.40

最后2个需要将 Allure 解压后在进行安装,不然会报错

3.输入 pip3 list 查看三方库是否安装成功

打开本地命令窗口,将本地文件拷贝到容器中 测试

docker cp 本地路径和文件 docker id:/容器目录
docker cp /Users/zhang/PycharmProjects/test.zip f27e05f11728:/

3.2 Jenkins及项目配置

Jenlins添加allure插件
系统管理–插件管理–可选插件搜索allure添加
Docker上搭建Pytest+Allure+Jenkins接口自动化环境_第6张图片
Docker上搭建Pytest+Allure+Jenkins接口自动化环境_第7张图片

1.新建项目

Docker上搭建Pytest+Allure+Jenkins接口自动化环境_第8张图片
2.添加gitlab的账户信息
Docker上搭建Pytest+Allure+Jenkins接口自动化环境_第9张图片
Docker上搭建Pytest+Allure+Jenkins接口自动化环境_第10张图片
3.构建触发配置
以我的项目为例 每天早上8点运行(H代表分钟,服务区空闲的时候运行,不是整点)每次构建之前先清空上次构建的数据缓存

0 14-18/1 * * 1-5 (每周五,下午2点到6点每小时整点运行一次)
https://tool.lu/crontab/ 在线工具
Docker上搭建Pytest+Allure+Jenkins接口自动化环境_第11张图片

Docker上搭建Pytest+Allure+Jenkins接口自动化环境_第12张图片

4.构建信息配置

Docker上搭建Pytest+Allure+Jenkins接口自动化环境_第13张图片

5.构建后操作
这一步比较关键,有很多同学 构建完成后打开报告出现没有数据的情况 都是这一步出现的问题!!!
Docker上搭建Pytest+Allure+Jenkins接口自动化环境_第14张图片
最后附上一份定时运行的报告数据
到这里就已经完成安装了。后面会介绍将配置好的容器打包上传到自己的docker上
Docker上搭建Pytest+Allure+Jenkins接口自动化环境_第15张图片

Docker上搭建Pytest+Allure+Jenkins接口自动化环境_第16张图片
Docker上搭建Pytest+Allure+Jenkins接口自动化环境_第17张图片

6. 踩坑
实践的时候难免会碰到各种各样的问题,这里把我遇到的问题总结一下。
(6.1)镜像当中确少greenlet 插件
先查看python3 pip3的安装路径是否有greenlet文件目录
在这里插入图片描述
然后进入 /usr/lib/python3.6/site-packages 文件夹,这里面都是python3所需要的环境

将这两个文件放进去(从宿主机拷贝到容器的这个目录当中)下载 greenlet 密码 48n2
拷贝完之后输入pip3 list 查看是不是已经有该插件了,然后在去执行刚刚安装报错的插件 使用pip3 install 库名称

(6.2)提示找不到文件 command not found
使用绝对路径去运行

(6.3)github拉取代码失败
账号和密码正确,ssh密匙没有问题 第一次拉取成功,后面拉取一直失败

连接github的时候选择的是ssh 但是在配置url连接的时候选择的是https所有会导致失败 使用ssh拉取代码显示成功[email protected]:xxx/zh-cnProject.git 格式类型一定要相对应

(6.4)jenkins时间与本地时间不一致
启动jenkins容器的时候添加-e JAVA_OPTS=-Duser.timezone=Asia/Shanghai
在这里插入图片描述
(6.5)飞书通知报告为空
Docker上搭建Pytest+Allure+Jenkins接口自动化环境_第18张图片
Docker上搭建Pytest+Allure+Jenkins接口自动化环境_第19张图片
解决方法 查看jenkins allure report配置
Docker上搭建Pytest+Allure+Jenkins接口自动化环境_第20张图片

码字不易,阅读或复制完了,点个赞!谢谢

docker pull songpeilun/pythonautomation:1.0.1
(包含封装好的python3环境及依赖环境,下载直接启动配置项目即可)

你可能感兴趣的:(#,接口自动化API,docker,jenkins)