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

打印 上一主题 下一主题

主题 1029|帖子 1029|积分 3087

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
作者碎碎念:
测试环境 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 + 镜像名字
举例:
  1. docker build -t chrome-debug .
复制代码
这里 -t 选项用于为构建的 Docker 镜像指定标签(tag)。标签是镜像名称的一部分,资助用户标识和管理镜像。镜像的完备标签格式通常是 repository:tag,例如 myapp:latest。
5、基于新镜像run一个container并进入交互模式

有了镜像之后我们相当于只有一个房子的照片 但是还没有搭建完成 必要docker run 才是把这个房子真正的搭建起来而且把脚本(看成人)也放进去跑
这里我比力喜欢用docker run -it 直接进入交互模式 更多进入交互模式的方法可以看我这篇文章
举例:
  1. 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搭建自动化集成环境 渴望能资助到共同进步的同砚

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

慢吞云雾缓吐愁

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表