【史上最硬核分享】Docker+jenkinsPipeline 运行实现 python 自动化(超详细)

news2024/12/23 1:25:42

一、实现思路

  1. 在 Linux 服务器安装 docker
  2. 创建 jenkins 容器
  3. jenkins 中创建 pipeline 项目
  4. 根据自动化项目依赖包构建 python 镜像(构建自动化 python 环境)
  5. 运行新的 python 容器,执行 jenkins 从仓库中拉下来的自动化项目
  6. 执行完成之后删除容器

二、环境准备

  • Linux 服务器一台(我的是 CentOS7)
    1、有云服务器的同学直接用云服务器2、没有云服务器的同学参考我的博客自己动手安装虚拟机吧
  • 在服务器上正确安装 docker
    1、拉取 jenkins 镜像jenkins/jenkins:alpine2、拉取 python3 镜像docker pull python:3-alpine

三、创建 jenkins 容器

  1. 命令
    docker run -dit --name=jenkins_save01 -p 9999:8080 -u=root -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker jenkins/jenkins:alpine
  2. 参数说明
    -i:表示运行容器-t:表示容器启动后会进入其命令行-d:守护式方式创建容器在后台运行--name:容器名称-p 9999:8080:端口映射,宿主机端口:jenkins 容器端口-u=root:指定容器用户为 root 用户-v /var/run/docker.sock:/var/run/docker.sock:将 docker.sock 映射到 jenkins 容器中docker.sock 文件是 docker client 与 docker daemon 通讯的文件-v /usr/bin/docker:/usr/bin/docker:将宿主机 docker 客户端映射到 jenkins 容器中
  3. 运行效果
    1、看到返回容器 ID 表示 jenkins 容器创建成功

 同时,我也准备了一份软件测试面试视频教程(含接口、自动化、性能等),需要的可以直接在下方观看,或者直接关注VX公众号:互联网杂货铺,免费领取

软件测试视频教程观看处:

字节大佬教你逼自己如何在15天内掌握自动化测试(接口自动化/APP自动化/Web自动化/性能测试),内含项目实战

四。 配置 jenkins 容器

  1. 浏览器访问 http://192.168.1.66:9999,来到 jenkins 解锁页面
    1、http://192.168.1.66 为 Linux 服务器 IP 地址2、9999 为宿主机映射端口

在 Linux 服务器执行命令获取管理员密码
执行命令:docker logs jenkins_save01

复制密码输入到密码框,点下一步,来到如下页面(中间需要等待一段时间,大概 1 分钟左右,耐心等待)

 取消默认插件勾选,进入下一步

设置管理员用户名和密码(以后就用这个账号密码登陆你的 jenkins

配置实例

jenkins 初始化完成看到如下界面

五。 jenkins 安装插件

点上一步骤开始使用 jenkins,来到如下界面

点 Manage Jenkins 来到如下页面

点 Manage Plugins 安装插件
1.Git 插件安装

2、Docker 插件安装


 

3、HTML Publisher 插件安装


 

4、安装 Pipeline 插件

 
5、安装完成后重启 jenkins 容器
docker restart jenkins_save01

六。 创建 jenkins 任务

重新登陆 jenkins,点 New Item

选择创建 Pipeline 项目

配置构建记录保留规则

配置 Git 仓库

 添加 Git 凭证

配置 Jenkinsfile 路径

配置完成直接点保存即可

七。 构建有项目执行环境的 python 镜像

  1. 将项目依赖包导出来到 requirements.txt 文件中,txt 文件名称可以随意写
    pip freeze > requirements.txt
  2. 在宿主机(安装 docker 的机子)上新建一个目录(我的目录在/app),将 requirements.txt 文件复制进去
  3. 在 app 目录下创建 Dockerfile 文件(文件名必须是 Dockerfile,没有后缀)
  4. requirement.txt 恩建内容如下
unittestreport==1.3.2
openpyxl==3.0.7
ddt==1.4.2
pytest==6.2.2
selenium==3.141.0
pymysql==1.0.2
faker==8.1.0
jsonpath==0.82
BeautifulReport==0.1.3
rsa==4.7.2
pytest-html==3.1.1
allure-pytest==2.9.43
requests-toolbelt==0.9.1

5.Dockerfile 内容以及解释如下

FROM python:3-alpine  #基于python:3-alpine这个基础镜像镜像构建镜像
WORKDIR /app   #切换工作空间目录
ADD ./requirements.txt /app #将python项目依赖包文件添加到镜像
RUN pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple #安装依赖包
CMD ["python3", "main.py"] #设置容器执行后自动执行的命令,这里main.py是我们自动化框架的执行入口文件

在 app 目录下执行镜像构建命令
docker build -t python3.9:haili .
-t:镜像名称
点(.):点表示 Dockerfile 文件所在的目录,我现在在 app 目录下,点表示当前目录

6.构建成功后会看到一个新的镜像(docker images)

八、创建 build.sh 文件并放到项目根目录下

  echo "运行容器python执行自动化"
docker run --rm -w=$WORKSPACE --volumes-from=jenkins_save01 python3.9:haili
echo "python执行自动化执行成功"

九、写 Jenkinsfile 文件并将放到项目根目录下

  pipeline{
    //配置执行环境
    agent any
    //配置构建过程
	stages{
		stage('build'){
			steps{
			    echo '开始执行shell脚本'
				sh 'sh build.sh'
			}
		}//stage
	}//stages

   //配置构建后操作
	post{
        always{
          echo 'Pipeline 构建成功'
                   		publishHTML(target:[allowMissing: false,
					 alwaysLinkToLastBuild: true,
					 keepAll: true,
					 reportDir: 'reports',
					 reportFiles: '*.html',
					 reportName: 'My Reports',
					 reportTitles: 'The Report'])
        }
    }//post
}//pipeline

十、提交代码到远程仓库

Git add .

Git commit -am'update'

Git push

十一、构建你 jenkins 任务

点构建

查看构建日志

  

查看测试报告,此时的测试报告会没有样式,因为被 Jenkins 禁用了 CSS 样式,需要我们手动解决

  

十二、解决测试报告没有样式的问题

  

把这个代码放进去执行:System.setProperty("

hudson.model.DirectoryBrowserSupport.CSP","")

执行成功返回是空,说明没问题

重新构建就可以看到漂亮的测试报告了


都看到这了,点个赞再走呗!

PS:如需要软件测试学习资料,可在公众号(互联网杂货铺),后台回复1,小编后面会逐步完善自己收藏的资料。

整理不易,给个关注点个赞吧,谢谢各位大佬!

 

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

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

相关文章

HUAWEI华为笔记本MateBook 14 I5 独显(KLV-W19)原装出厂Windows10系统1809

华为原厂Windows10系统,自带指纹、声卡、显卡等所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、华为电脑管家等预装程序 链接:https://pan.baidu.com/s/1ylRh1RmZU0S67ayGip8bpw?pwds34v 提取码:s34v

数据库被攻击需要注意什么

没想到自己用了一个简单的腾讯虚拟机,里面自己安装了一个 MySQL 数据库也会被黑客攻击。 一、问题现象 小程序访问不了,后台程序报数据库相关的错误。 查看数据库,发现数据库被篡改。 二、问题原因 1、为了可以远程能够访问数据库&#xf…

是时候重视官网了,寄生平台的生意表达,就是在给平台打工

B2C在国外80%在官网成交,20%在电商平台;在中国刚好反过来,99%在电商及社交平台,也许只有1%在官网,导致大量的利润都交给平台,换句话说,就是给平台打工。 “要改变普遍不重视官网的认知&#xf…

在Windos 10专业版搭建Fyne(Go 跨平台GUI)开发环境

目录 在Windos 10专业版搭建Fyne(Go 跨平台GUI)开发环境一 Fyne 和 MSYS2简介1.1 Fyne1.2 MSYS2 二 安装 MSYS22.1 下载MSYS22.2 安装2.3 环境变量设置2.4 检测安装环境 三 参考文档 在Windos 10专业版搭建Fyne(Go 跨平台GUI)开发…

锐捷交换机vlan隔离(wifi段仅能访问外网,不能访问内网)

因为公司的wifi段,未做隔离,无意间上了网,发现能访问内网网段,这里内网是10、20段,管理网段是100段,于是做了和内网的vlan隔离。 拓朴如下,所有vlan的网关都起在核心上,所有交换机通…

SpringMVC----自定义注解

目录 自定义注解 是什么 作用 JDK元注解 测试案列 案例一(获取类与方法上的注解值) 案例二(获取类属性上的注解属性值) 案例三(获取参数修饰注解对应的属性值) 五.Aop自定义注解的应用 Mylog…

面试题三:请你谈一谈Vue中的filter功能的实现

Vue中过滤器(filter)的使用 我们想一下有methods为什么要有filter的存在呢,因为filter的实现效率比methods要高的多。 看一下官方定义: Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化。过滤器可以用在两个地方:双花括号…

常见知识蒸馏方法总结记录

蒸馏(Knowledge Distillation)是一种将一个模型(通常称为教师模型)学习到的知识迁移到另一个模型(通常称为学生模型)的技术。通常,教师模型是一个复杂而准确的模型,而学生模型则是一…

ABB PU515A 3BSE032401R1 自动化控制模块

ABB PU515A 3BSE032401R1 是一种自动化控制模块,通常用于工业自动化和控制系统中,以支持各种控制和监测任务。以下是可能适用于ABB PU515A 3BSE032401R1 自动化控制模块的一些常见产品特点: 多通道控制: PU515A 通常具有多个输入和…

基于5G网络的智能车间MES设计方案

导读 在数字化转型建设过程中,机械制造企业的难点是智能车间的设计。随着5G技术的发展,大量的带网络接口的智能设备的投入使用,智能车间的实施成为可能。本文从车间生产计划调度、过程管控、设备管理、质量管理、能耗管理和物流仓储等方面提…

【JAVA】关于重写(Override)与重载(Overload)

个人主页:【😊个人主页】 系列专栏:【❤️初识JAVA】 文章目录 前言方法重载(Overload)重载的规则示例代码方法重写(Override)重写的规则示例代码方法重载与方法重写的区别 前言 关于JAVA&…

LabVIEW使用PID对激振器控制

LabVIEW使用PID对激振器控制 LabVIEW的PID在许多项目中都会用到,比如温度控制、压力控制、流量控制等,一般用自带的PID通过调节参数的值,基本上都可以解决。现在项目的情况是,通过正弦波的输出控制激振器,输出正弦波的…

【JUC系列-06】深入理解Semaphore底层原理和基本使用

JUC系列整体栏目 内容链接地址【一】深入理解JMM内存模型的底层实现原理https://zhenghuisheng.blog.csdn.net/article/details/132400429【二】深入理解CAS底层原理和基本使用https://blog.csdn.net/zhenghuishengq/article/details/132478786【三】熟练掌握Atomic原子系列基本…

前端实现符合Promise/A+规范的Promise

🎬 岸边的风:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 介绍: Promise/A规范简介 1. Promise的三种状态: 2. 状态转换: 3. Promise的…

游戏联运和游戏代理的区别

游戏联运和游戏代理是游戏行业中两种不同的合作模式,它们有一些明显的区别: 合作性质: 游戏联运:游戏联运是多家游戏发行商或开发商之间的合作,它们合作共同推广、发布和运营游戏,每个合作方负责自己的一…

许可分析 license分析 第二章

许可分析是指对软件许可证进行详细的分析和评估,以了解组织内部对软件许可的需求和使用情况。通过许可分析,可以帮助组织更好地管理和优化软件许可证的使用。以下是一些可能的许可分析方法和步骤: 软件许可证更新和续订:及时跟踪和…

QT-day1

实现华清远见登陆界面 #include "mywnd.h" #include <iostream> #include <QDebug> #include <QPushButton> #include <QLineEdit> #include <QLabel>MyWnd::MyWnd(QWidget *parent): QWidget(parent) {//设置固定窗口大小长400&…

ToDoList待办事件(Vue实现)详解

组件化的编码流程&#xff08;通用&#xff09; 实现静态组件&#xff1a;抽取组件&#xff0c;使用组件实现静态页面效果展示动态数据 数据的类型名称 数据保存的组件位置交互-从绑定事件监听开始 实现静态页面 组件按照功能划分 也可以按照其他的划分&#xff0c;我是按照…

Mysql高级——索引(2)

常见索引 索引分类 在MySQL数据库&#xff0c;将索引的具体类型主要分为以下几类&#xff1a;主键索引、唯一索引、常规索引、全文索引。 分类含义特点关键字主键索引针对于表中主键创建的索引默认自动创建, 只能有一个PRIMARY唯一索引避免同一个表中某数据列中的值重复可以…

Linux系统编程(二):文件和目录

参考引用 UNIX 环境高级编程 (第3版)黑马程序员-Linux 系统编程 1. 文件存储 一个文件主要由两部分组成&#xff0c;dentry (目录项) 和 Inode所谓的删除文件&#xff0c;就是删除 Inode&#xff0c;但数据其实还是在硬盘上&#xff0c;以后会覆盖掉 1.1 Inode 其本质为结构体…