Jenkins执行自动化测试报错:geckodriver不存在但文件实际存在
我之前踩过完全一样的坑,明明文件在指定路径、权限也拉满了,Jenkins就是不认,给你几个实用的排查和解决方向:
检查Jenkins用户的PATH环境变量
Jenkins默认是用jenkins系统用户运行的,这个用户的PATH可能和你登录服务器时用的普通用户不一样。你可以在Jenkins的构建步骤里先加一个Shell执行:echo $PATH ls -l /usr/local/bin/geckodriver如果输出里看不到
/usr/local/bin,那就是PATH没包含这个目录。解决办法有两种:- 在Jenkins全局配置的「环境变量」里添加
PATH+EXTRA=/usr/local/bin; - 直接在测试代码里指定geckodriver的绝对路径,比如Java代码里写:
System.setProperty("webdriver.gecko.driver", "/usr/local/bin/geckodriver");
- 在Jenkins全局配置的「环境变量」里添加
验证文件的真实可用性
有时候看起来文件存在,但可能是软链接失效、或者文件本身损坏。可以在Jenkins构建里执行:file /usr/local/bin/geckodriver正常输出应该是类似
ELF 64-bit LSB executable...的可执行文件描述。另外还要确认/usr/local/bin目录本身的权限,至少要给jenkins用户「读+执行」权限(比如权限设为755),不然就算文件权限777也进不去目录。排查架构兼容性问题
要是服务器是64位系统,但你下载的geckodriver是32位版本,系统会因为无法执行而报「文件不存在」的错误(这个坑特别容易忽略)。先看服务器架构:uname -m输出
x86_64就是64位,然后下载对应架构的geckodriver版本替换掉现有文件,再重新测试。容器化Jenkins的特殊情况
如果你是用Docker运行Jenkins,那你在宿主机/usr/local/bin里的geckodriver是不会自动出现在容器里的。这时候要么把宿主机的driver路径挂载到容器内的对应位置,要么直接进入Jenkins容器内部安装geckodriver。
内容的提问来源于stack exchange,提问作者Pranjal Prakash Srivastava

