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

news2025/1/9 14:21:43

作者碎碎念:

测试环境 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搭建自动化集成环境 希望能帮助到共同进步的同学

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

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

相关文章

【xLua】xLua-master签名、加密Lua文件

GitHub - Tencent/xLua: xLua is a lua programming solution for C# ( Unity, .Net, Mono) , it supports android, ios, windows, linux, osx, etc. 如果你想在项目工程上操作,又发现项目工程并没导入Tools,可以从xLua-master工程拷贝到项目工程Assets…

Linux(上):基本知识篇

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Linux初识1 Linux简介2 Linux学习环境配置(1)安装Linux(2)FinalShell远程连接Linux服务器二、Linux基础命令1 Linux目录结构,根目录 /2 Linux命令基础(1)什么是命令、命令行?(2)…

【安卓开发】【Android Studio】项目构建失败提示【Could not read metadata.bin】解决方法

一、问题说明 在Android Studio中开发安卓项目时,项目构建失败,提示如下: Could not read workspace data from xxx/xxx/(某个目录,和gradle有关):could not read ...metadata.bin&#xff08…

细说STM32F407单片机以轮询方式读写外部SRAM的方法

目录 一、实例的功能 二、工程配置 1、KEYLED 2、时钟、DEBUG、USART6、NVIC、GPIO、CodeGenerator 3、FSMC (1) 模式设置 (2) Bank 1子区3参数设置 1) NOR/PSRAM control组,子区控制参数 2) NOR/PSRAM timi…

下载ffmpeg执行文件

打开网址:Download FFmpeg 按下面步骤操作 解压文件就可以看到ffmpeg的执行文件了,需要通过命令行进行使用: ffmpeg命令行使用参考: ffmpeg 常用命令-CSDN博客

嵌入式系统 (2.嵌入式硬件系统基础)

2.嵌入式硬件系统基础 2.1嵌入式硬件系统的组成 嵌入式硬件系统以嵌入式微处理器为核心,主要由嵌入式微处理器、总线、存储器、输入/输出接口和设备组成。 嵌入式微处理器 嵌入式微处理器采用冯诺依曼结构或哈佛结构:前者指令和数据共享同一存储空间…

【合作原创】使用Termux搭建可以使用的生产力环境(九)

前言 在上一篇【合作原创】使用Termux搭建可以使用的生产力环境(八)-CSDN博客中我们讲到了如何安装IDEA社区版,并在Termux中安装VNC服务器,在proot-distro的Debian中启动xfce桌面,并通过这个方式解决了IDEA社区版中无…

计算机网络--UDP和TCP课后习题

【5-05】 试举例说明有些应用程序愿意采用不可靠的UDP, 而不愿意采用可靠的TCP。 解答: 这可能有以下几种情况。 首先,在互联网上传输实时数据的分组时,有可能会出现差错甚至丢失。如果利用 TCP 协议对这些出错或丢失的分组进行重传&…

STM32学习(十)

I2C模块内部结构 I2C(Inter-Integrated Circuit)模块是一种由Philips公司开发的二线式串行总线协议,用于短距离通信,允许多个设备共享相同的总线‌。 ‌硬件连接简单‌:I2C通信仅需要两条总线,即SCL&…

Flutter:吸顶效果

在分页中,实现tab吸顶。 TDNavBar的screenAdaptation: true, 开启屏幕适配。 该属性已自动对不同手机状态栏高度进行适配。我们只需关注如何实现吸顶。 view import package:ducafe_ui_core/ducafe_ui_core.dart; import package:flutter/material.dart; import p…

数据结构基础之《(13)—前缀树》

一、前缀树 1、前缀树(Trie),又称字典树或单词查找树,是一种用于存储字符串集合的数据结构。 2、前缀树的操作 (1)单个字符串中,字符从前到后的加到一棵多叉树上 (2)字…

道品科技智慧农业与云平台:未来农业的变革之路

随着全球人口的不断增长,农业面临着前所未有的挑战。如何在有限的土地和资源上提高农业生产效率,成为了各国政府和农业从业者亟待解决的问题。智慧农业的兴起,结合云平台的应用,为农业的可持续发展提供了新的解决方案。 ## 一、智…

【Linux基础指令】第一期

一、Linux的介绍 Linux是一个开源的操作系统,性能、稳定性、安全性方面上都是很优秀的,所以它一直是企业后端系统的首选。所以其图形化界面并不是Linux的必需品,所以我们避免不了要使用命令行的形式来使用Linux,也就离不开…

​​​​​​芯盾时代以数据为核心的车联网业务安全解决方案

芯盾时代车联网业务安全建设聚焦智能网联业务运行过程产生的多维度、多模态、多视角数据以及因业务需求产生的过程数据和业务衍生数据,以网络安全等级保护为基础,坚持网络安全管理体系和技术体系并重的原则,加强网络安全体系化、实战化、常态…

剖析 Claim-Check 模式:以小传大,赋能分布式系统与微服务

1. 前言 1.1 写作背景与目的 在当今分布式系统与微服务架构盛行的时代,服务间的消息传递与数据交换越来越频繁。传统的消息传输在面对海量数据时,往往会遇到以下痛点: 消息体过大:直接通过消息队列或服务间接口发送大体量数据&…

VS2022引入sqlite数据库交互

法一:用官网编译好的动态库(推荐) 下载所需文件 sqlite官网地址:https://www.sqlite.org/howtocompile.html 下载以下的2个压缩包 第一个压缩包 sqlite-amalgamation-xxxx.zip,xxxx是版本号,保持一致即可,这里面有sqite3.h 第…

计算机的错误计算(二百零五)

摘要 基于一位读者的问题,提出题目:能用数值计算证明 吗?请选用不同的点(即差别大的数)与不同的精度。实验表明,大模型理解了题意。但是,其推理能力值得商榷。 例1. 就摘要中问题&#xff0…

设计形成从业务特点到设计模式的关联

规范和指引在应用架构、数据架构等各架构方向上形成规范性约束指导。同一个决策要点、架构单元在统一的架构原则指导下,会因业务特点差异有不同的实现,经过总结形成了最佳实践。在开展新应用的设计时,根据决策要点以及相关的业务特点&#xf…

深度学习blog-深刻理解线性变换和矩阵

深度学习中避免不了矩阵运算,或者张量(其实是矩阵数组)运算。卷积是矩阵加、乘法,注意力也是一样。本质都一样,所谓注意力,卷积、滤波,是对不必了解数学的人说的,底层都是矩阵运算&a…

C/C++程序性能测试方法综述

摘要 性能测试是软件开发中不可或缺的一部分,特别是在对性能要求较高的C/C程序中。本文将详细介绍多种C/C程序性能测试方法,包括时间复杂度分析、事后统计方法、事前分析估算方法、使用性能测试工具(如Google Benchmark、gprof、Valgrind等&…