自动化脚本本地可执行但是Jenkins上各种报错怎么解决

作者碎碎念:

测试环境 Jenkins+docker+python+unittest, 
测试问题:本人在写关于SAP4Me网站的自动化脚本时遇到一个问题 本地怎么都跑的通 但是一上Jenkins会出现各种各样的问题 因为在Jenkins里面脚本是放在docker环境里面跑的 所以环境的差异 就会出现各种各样需要调试的问题 比如什么路径找不到 浏览器启动失败等等 一开始因为pipline cript写在Jenkins平台上 加上这个对docker理解不深 一直本地调试 再gitpush去Jenkins上看日志 真的很呆 经过去学习了docker方面的知识之后 发现可以在本地起docker环境 直接本地调试 所有问题解决了之后再去push到git上 然后去Jenikins上执行pipline 就会一次成功 具体做法如下:

目录

1、下载docker并安装

2、去平台上找一个适配的基础镜像

1、进入docker hub 

2、搜索关键字python并下载对应的镜像

3、在看到适合自己需求的版本之后利用dockerpull+image的名字把这个基础镜像拉到本地

3、基于这个基础的镜像写dockerfile

4、打开命令窗口 docker build 一个新的镜像

5、基于新镜像run一个container并进入交互模式

6、在交互模式下run你的脚本

7、根据报错调试你的脚本并重复docker build -> run -it

8、push脚本 到Jenkins执行pipline


1、下载docker并安装

我是直接下载的docker桌面版 如果有更方便的方法欢迎下方留言
docke下载地址:官方doker desktop下载地址
下载完成直接逐步安装就好 这里不再赘述 但是要提一嘴的是 在本地每次build之前要先打开docker 否则会报无法连接的错误

2、去平台上找一个适配的基础镜像

举个例子 我的脚本是python语言 那么我去找一个有python的基础镜像就可以 后续所需要的chromedriver等依赖都可以后续进行安装 所有要安装的依赖以及要进行的操作定义在这个dockerfile里面就行 后续docker build的时候会自动下载

那么我们去哪里找这么一个镜像呢 -》 去Docker Hub ,这里提一嘴,Docker Hub是 Docker 的官方仓库,用于存储和分享 Docker 镜像

1、进入docker hub 

2、搜索关键字python并下载对应的镜像

3、在看到适合自己需求的版本之后利用dockerpull+image的名字把这个基础镜像拉到本地

要注意的是 docker内的镜像是为了完全copy你本地的环境 所以要尽量选择与本地python版本一致的 定义docekerfile的时候下载依赖的版本也是同理

3、基于这个基础的镜像写dockerfile

有了这个镜像之后相当于有了地基 我们要开始盖房子了 一切准备好 就可以把我们的脚本放进去跑 那怎么理解盖房子的这个过程 就需要用到docker file

dockerfile具体的写法不作赘述 详情看我另外一篇文章

4、打开命令窗口 docker build 一个新的镜像

这个就比较简单了 直接docker build + 镜像名字
举例:

docker build -t chrome-debug .

这里 -t 选项用于为构建的 Docker 镜像指定标签(tag)。标签是镜像名称的一部分,帮助用户标识和管理镜像。镜像的完整标签格式通常是 repository:tag,例如 myapp:latest

5、基于新镜像run一个container并进入交互模式

有了镜像之后我们相当于只有一个房子的照片 但是还没有搭建完成 需要docker run 才是把这个房子真正的搭建起来并且把脚本(当作人)也放进去跑

这里我比较喜欢用docker run -it 直接进入交互模式 更多进入交互模式的方法可以看我这篇文章
举例:

docker run -it --name selenium-debug-path chrome-debug sh

这一命令的作用是使用 chrome-debug镜像创建并启动一个新的容器,同时进入该容器的交互式 Shell 环境。容器被命名为 selenium-debug-path,用户可以在这个容器内手动输入和执行命令。通常,这种操作用于调试或需要手动在容器内执行一些操作的场景。 

-it:

  • -i:交互模式,保持标准输入(stdin)打开,即使没有连接到终端。这允许用户在容器中手动输入命令。
  • -t:分配一个伪TTY(虚拟终端),-i 结合使用时,可以使用户进入到一个交互式的Shell环境。

sh:

  • 这是在容器启动后执行的命令。在这个例子中,sh 代表 Shell,它会启动一个 Shell 会话,使用户能够在运行的容器中进行交互操作。如果镜像是基于 Linux 的,如 Ubuntu、Alpine 等,这些镜像通常带有 /bin/sh

6、在交互模式下run你的脚本

进去之后就是一个正常的linux命令行页面 可以用python + 脚本名字去运行你想调试的脚本看看什么报错
示例:

7、根据报错调试你的脚本并重复docker build -> run -it

但其实也有办法能够实时同步你的脚本不用重新build+run的办法 不过我没有学习那么深 感兴趣的同学可以自己去学习一下

8、push脚本 到Jenkins执行pipline

在本地调试成功之后就可以直接push到git那边了 结合Jenkins上写好的pipline script去运行一下看看是否成功

这边给一个小建议 最好后期将这个script写成Jenkinsfile放在自己的项目的根目录下 对应Jenkins上改成from SCM 不然调试的时候来回改很容易改错了忘了是哪里改错了



 其实这篇文章算是一个经验分享 因为自己从0搭建自动化集成环境 希望能帮助到共同进步的同学

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Nginx入门笔记

Nginx入门笔记 一、Nginx基本概念二、代理1、正向代理2、反向代理 三、准备工作1、CentOS 7安装nginx(1). 安装必要的依赖(2)下载nginx(3)编译安装(4)编译并安装 Nginx(5)启动nginx …

优化提示词改善答疑机器人回答质量

1.通过优化提示词来调整大模型的回答 1.1使用场景 默认提示词无法满足业务要求。 回答的内容太简单/困难,输出内容/格式/语气达不到要求等 1.2llama-index 的提示词模版 1.2.1llama-index 的默认模板 from llama_index.llms.dashscope import DashScope from lla…

HTML5 手风琴(Accordion)详解

HTML5 手风琴(Accordion)详解 手风琴(Accordion)是一种常用的用户界面控件,允许用户通过点击标题来展开或收起内容,适合用于显示大量信息而不占用太多空间。以下是手风琴的详细介绍及实现示例。 1. 手风…

maven如何从外部导包

1.找到你项目的文件位置,将外部要导入的包复制粘贴进你当前要导入的项目下。 2.从你的项目目录下选中要导入的包的pom文件即可导包成功 注意一定是选中对应的pom文件 导入成功之后对应的pom.xml文件就会被点亮

Eclipse配置Tomcat服务器(最全图文详解)

前言: 本章使用图文讲解如何在Eclipse开发工具中配置Tomcat服务器、如何创建和启动JavaWeb工程,欢迎童鞋们互相交流。觉得不错可以三连订阅喔。 目标: 一、配置Tomcat服务器 1. 切换Eclipse视图 2. 打开菜单 3. 找到服务选项 4. 选择…

汽车供应链关键节点:物流采购成本管理全解析

在汽车行业,供应链管理是一项至关重要的任务。汽车制造从零部件的生产到整车的交付,涉及多个环节,其中物流、采购与成本管理是核心节点。本文将深入分析这些关键环节,探讨如何通过供应商管理系统及相关工具优化供应链管理。 一、…

软件工程期末整理(二)

快速原型开发模型是(适用于客户需求难以清楚定义、规模较小的系统)。(编写系统实施计划)不是系统设计阶段的主要活动 解释:系统实施计划”更侧重于后续的实施与部署阶段,属于项目管理层面的内容 协作性不属于构件的特性在类图中…

STM32-笔记35-DMA(直接存储器访问)

一、什么叫DMA? DMA(Direct Memory Access,直接存储器访问)提供在外设与内存、存储器和存储器之间的高速数据传输使用。它允许不同速度的硬件装置来沟通,而不需要依赖于CPU,在这个时间中,CPU对于…

代码管理助手-Git

前言 Git 是一个版本控制系统,可以帮助你记录文件的每一次修改。这样,如果你在编程时不小心把代码写错了,可以很容易地回退到之前的版本。最重要的是,Git 是完全免费的,用户可以在自己的计算机上安装和使用 Git&#x…

蓝耘:GPU算力云服务的技术探索与AIGC应用支持

🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 一、蓝耘的核心优势 1. 行业领先的基础设施 …

Kubernetes Gateway API-4-TCPRoute和GRPCRoute

1 TCPRoute 目前 TCP routing 还处于实验阶段。 Gateway API 被设计为与多个协议一起工作,TCPRoute 就是这样一个允许管理TCP流量的路由。 在这个例子中,我们有一个 Gateway 资源和两个 TCPRoute 资源,它们按照以下规则分配流量&#xff1…

在不到 5 分钟的时间内将威胁情报 PDF 添加为 AI 助手的自定义知识

作者:来自 Elastic jamesspi 安全运营团队通常会维护威胁情报报告的存储库,这些报告包含由报告提供商生成的大量知识。然而,挑战在于,这些报告的内容通常以 PDF 格式存在,使得在处理安全事件或调查时难以检索和引用相关…

Unity学习之UGUI进阶

一、事件监听接口 1、作用 用于实现类型长按、双击、拖拽等基础控件无法实现的功能 所有控件都能够添加更多的事件监听来处理对应的逻辑 2、事件监听接口类型 (1)常用事件接口 (2)不常用事件接口 3、使用事件监听接口 &#…

Redis为 List/Set/Hash 的元素设置单独的过期时间

一.业务简介 我们知道,Redis 里面暂时没有接口给 List、Set 或者 Hash 的 field 单独设置过期时间,只能给整个列表、集合或者 Hash 设置过期时间。 这样,当 List/Set/Hash 过期时,里面的所有 field 元素就全部过期了。但这样并不…

【Notepad++】Notepad++如何删除包含某个字符串所在的行

Notepad如何删除包含某个字符串所在的行 一,简介二,操作方法三,总结 一,简介 在使用beyoundcompare软件进行对比的时候,常常会出现一些无关紧要的地方,且所在行的内容是变化的,不方便进行比较&…

APP上架之Android 证书 MD5 指纹

Android 证书 MD5 指纹 1. 什么是 Android 证书 MD5 指纹? Android 证书 MD5 指纹是对证书数据进行 MD5 哈希运算后得到的 128 位字符串。在 Android 开发中,每个证书在理论上都有一个唯一的 MD5 指纹,用于识别和验证证书的有效性。证书指纹…

软件安全性测试有哪些测试方法?

随着数字化进程的加速,软件在各个领域扮演着越来越重要的角色。软件的安全性测试作为保证软件质量和安全的重要环节,逐渐成为企业在开发和部署过程中不可或缺的一部分。 一、软件安全性测试的测试方法   1、静态分析法:通过分析源代码或二…

LabVIEW轴承性能测试系统

本文介绍了基于LabVIEW的高效轴承性能测试系统的设计与开发。系统通过双端驱动技术实现高精度同步控制,针对轴承性能进行全面的测试与分析,以提高轴承的可靠性和寿命。 项目背景 随着工业自动化程度的提高,对轴承的性能要求越来越高。传统的…

57. Three.js案例-创建一个带有聚光灯和旋转立方体的3D场景

57. Three.js案例-创建一个带有聚光灯和旋转立方体的3D场景 实现效果 该案例实现了使用Three.js创建一个带有聚光灯和旋转立方体的3D场景。 知识点 WebGLRenderer(WebGL渲染器) THREE.WebGLRenderer 是 Three.js 中用于将场景渲染为 WebGL 内容的核…

如何使用vue引入three.js

在 Vue.js 项目中引入和使用 Three.js 是一个常见的需求,Three.js 是一个用于在浏览器中创建和显示动画 3D 计算机图形的 JavaScript 库。以下是一个基本的示例,展示如何在 Vue 项目中引入和使用 Three.js。 1. 创建 Vue 项目 如果你还没有一个 Vue 项…