持续集成 [jenkins] 只用 jenkins 中 python builder 或者 shell 执行 py.test 命令报错 “command not found”

匿名 · 2016年10月18日 · 3241 次阅读

jenkins 中通过 python builder 执行 shell

jenkins 构建报错日志

[UI_Monitor_python] $ /bin/sh -xe /Users/Shared/Jenkins/tmp/shiningpanda8557500049733673903.sh
+ py.test UI.py --maxfail=3 --pastebin=all --html=../output/html/report.html
/Users/Shared/Jenkins/tmp/shiningpanda8557500049733673903.sh: line 2: py.test: command not found

直接在终端上执行又是好的

▶ py.test -v
============================= test session starts ==============================
platform darwin -- Python 2.7.11, pytest-3.0.3, py-1.4.31, pluggy-0.4.0 -- /usr/local/opt/python/bin/python2.7
cachedir: .cache
rootdir: /Users/zengyuanchen, inifile: 
plugins: html-1.10.1

在 jenkins 配置了 PATH 路径也不行,本地环境变量 PATH 是正常的

▶ echo $PATH
/Users/xxx/.nvm/versions/node/v5.10.1/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/ci-tools/apache-ant-1.9.7/bin:/ci-tools/apache-jmeter-3.0/bin:/ci-tools/apache-maven-3.3.9/bin:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/bin:/ci-tools/apache-ant-1.9.7/bin:/ci-tools/apache-jmeter-3.0/bin:/ci-tools/apache-maven-3.3.9/bin:/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/bin

执行 which py.test 查看命令路径

▶ which py.test
/usr/local/bin/py.test

现在不知道问题在哪了

共收到 11 条回复 时间 点赞
匿名 #1 · 2016年10月19日

有人能看看么?

jenkins 找不到命令一般有两种解决方式(前提是 jenkins 所在用户组有该命令的执行权限):
1、增加环境变量:在待执行的 shell 脚本前,执行 export 命令:export PATH = xxx:$PATH(xxx 为找不到命令的所在目录)
2、脚本中直接使用命令的绝对路径:/usr/local/bin/py.test xxxx

没见过这个插件。
用 shell 的方式 试试。

Jenkins 遇到非原生态 shell 脚本执行时,不推荐用各种插件,环境问题,虚拟环境问题(virtualenv)、路径问题、执行上下文问题能把新手折腾个几天几夜。

  • jenkins 默认使用的用户和你在命令行里面敲命令的用户是一样的吗?/etc/sysconfig/jenkins 下面的 JENKINS_USER 是什么?
  • 我都是在当前用户下的.bash_profile 里面增加环境变量
  • 给 jenkins 目录赋权限
匿名 #6 · 2016年10月19日

#5 楼 @simple mac - 电脑没看到/etc/sysconfig 这个目录

  • .bash_profile 添加过 PATH,没生效,我又给删了,然后执行 echo $PATH 又可以打印出 path,不知道 path 配置在哪
  • jenkins 的 home 目录赋权?
匿名 #7 · 2016年10月19日

#4 楼 @Spenser 不折腾不行,要用啊

匿名 #8 · 2016年10月19日

#3 楼 @among29 shell 是可以的啊,现在要在 jenkins 中执行 shell,就不行

匿名 #9 · 2016年10月19日

#2 楼 @bufeng 2、脚本中直接使用命令的绝对路径:/usr/local/bin/py.test xxxx,刚试了这个,可行,第一条没明白你的意思,你是说把我要执行的脚本路径添加到 PATH 里面么?

匿名 #10 · 2016年10月19日

#5 楼 @simple 我在 jenkins 中执行 shell 命令 echo $PATH,打印出来的的路径就是缺少/usr/local/bin/,只需要把这个路径加进去就解决了

匿名 #11 · 2016年10月19日

已经解决了,方法是,在 jenkins,系统管理 - 管理节点 - 设置,添加对应命令的环境变量
PATH+LOCAL_BIN=/usr/local/bin 即可

匿名 关闭了讨论 10月19日 15:55
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册