经过测试对比: 如果测试脚本中使用 jpype 模块调用 jar 包, 执行失败(直接在服务器上执行通过, Jenkins 执行失败); 如果测试脚本没使用 jpype 模块,可正常执行。
有人遇到过类似的情况和对应的解决方案吗?
弱弱地猜测,Jenkins 上对应的 py 环境里是不是没装那个库?和你直接在服务器上运行调的不是同一个 python.exe?
服务器是作为 node 在 Jenkins 上跑的,其他的用例脚本可以正常跑,只有调用到 jar 包的用例跑不通。 我在看是否对应 java 配置的问题。
没报错日志吗?
就只有一句: Build step 'Execute shell' marked build as failure 所以百思不得其解,也不知道从何入手排查
问题解决了:
原因: python 脚本里使用 getDefaultJVMPath() 方法来获取对应的 JVM 环境。 如果直接在服务器上执行脚本,可以获取到正确的环境; 如果使用 Jenkins 跑,则获取到的是另外一个环境。 原因可能是其他人员修改过默认的配置信息。
解决方案: 因为目前脚本是在固定的 linux 服务器上执行,所以暂时写死对应的 JVM 环境,不再通过 getDefaultJVMPath() 方法来获取。 问题解决。
getDefaultJVMPath() 这个方法会先查找注册表获取你的 JVM 版本 /HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment/CurrentVersion 的值,然后再获取/HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment/{获取到的版本}/RunTimeLib 的值,就是 JVM 的路径,你看看是不是CurrentVersion的值不对。
getDefaultJVMPath()
/HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment/CurrentVersion
/HKEY_LOCAL_MACHINE/SOFTWARE/JavaSoft/Java Runtime Environment/{获取到的版本}/RunTimeLib
CurrentVersion
我是在 linux 服务器上部署的哦, 应该和注册表没关系。 不过分析也是类似的原因: 服务器上的 jdk 被重装过,路径可能被破坏了,导致 Jenkins 获取的路径和系统上 root 用户获取的路径不一致。
我也遇到了同样的问题,但是通过getDefaultJVMPath()方法查看了在服务器上和在 jenkins 上执行时获得的路径,都是相同的,想请教下楼主还会有什么原因吗
有什么错误截图吗?
这个是报错信息 下面是在 jenkins 和在服务器上执行时获取的 JVMpath