当前位置: 首页 > article >正文

自动化脚本本地可执行但是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搭建自动化集成环境 希望能帮助到共同进步的同学


http://www.kler.cn/a/473257.html

相关文章:

  • Linux(上):基本知识篇
  • 常用的AT命令,用于查看不同类型的网络信息
  • SQLite 调试与性能优化指南
  • 去掉el-table中自带的边框线
  • 我的前端面试笔记(React篇)
  • NRF24L01模块STM32通信-通信初始化
  • js适配器模式
  • 《Spring Framework实战》3:概览
  • Hybrid A*算法-KinodynamicAstar::estimateHeuristic
  • LLM 大语言模型学习记录
  • js可不使用document直接根据id获取id元素
  • 无人机培训机构模拟考试系统技术详解
  • 让生命科学数据为数字时代服务
  • ATmega328P是一款基于AVR架构的高性能、低功耗8位微控制器
  • ajax与json
  • `Opencv` 形态学笔记
  • C++ 函数 模板
  • 代码重构 - 规范
  • 【Dify】Dify自定义模型设置 | 对接DMXAPI使用打折 Openai GPT 或 Claude3.5系列模型方法详解
  • SAP销售订单与MRP的另一个关联点:需求类型