为什么在服务器上执行 pytest 成功,使用 jenkins 构建时执行却提示 not found,是缺少某些配置吗?
尝试一些方法后均未解决,求各位大佬帮忙看看
jenkins 日志里看到你命令行的用户名是 fsytest,控制台输出看到你用户是 root,可能是用户 PATH 的关系。也就是 pytest 安装在 root 用户的 PATH 下,但是没安装在 fsytest 用户的 PATH。
可以在 root 上用 which pytest 看看安装路径,然后把这个路径 export 到 fsytest 的 PATH 里。
这个问题我遇到过,我发现好像 cd 并不能切换到工作目录,执行 py 文件的时候要用全路径
python -m pytest
可以试一下这样执行
用 pytest 的全路径
我是使用 docker 部署的 jenkins,运行容器的时候也是挂载了本地的目录
您好,以我的理解,从 “pytest not found" 报错来看,要么是执行脚本的环境里面没有安装 pytest,要么就是 pytest 没有在环境变量里面。 您可以稍微改一下自己在 Jenkins 的命令,做一些打印来继续定位。
“cd ui_test
whoami
which pytest
pytest -vs xxxxxxxxx",
这样做的好处是,我们可以知道使用的是哪个账户(whoami)来执行脚本,以及在此账户下是否安装了 pytest (which pytest)。
我以前是在 pipenv 中执行 pytest 的,这样能够保障 python 环境的干净,还有就是建议你额外尝试下 jenkins_pipeline
配置 jenkins 的时候选择使用远程连接服务器执行脚本。类似这样
从 whoami 的打印来看, 执行脚本的账户是一个普通用户叫 jenkins。 从环境变量的输出来看, pytest 安装在 /usr/local/bin。所以接下来要解决的问题就是如何让普通用户可以执行 pytest, 例如,visudo 加入普通用户 or 把/usr/local/bin 的权限中 others 添加 rw 权限 or 使用普通用户 yum 安装 pytest 等等。 因为每个方法有利有弊,要根据你所使用的环境以及你想做这件事的目的来选择,所以具体方法您自己衡量选择吧。
BTW 我个人理解, 14L 那位说的也有道理,如果满足您的需求,也可以如此实现。
#!/bin/bash
把上面的加到 shell 脚本开头试试呢
问题也算解决,感谢各位回复
我在执行 node 命令时也出现了没有权限的日志,在运行 node 命令前先执行环境变量后解决问题。楼主可以参考试下