在两个centos 7.1系统上使用Oracle JDK 1.8.0_60时,一个Jenkins从站无法使用NoClassDefFoundError收集工件

时间:2016-05-27 18:09:51

标签: java jenkins centos jenkins-slave

嘲笑我:

两个几乎相同的jenkins从属服务器如何运行Oracle JDK 1.8 u60 Java有一个无法收集带有classdef错误的工件,而另一个很好吗?在这两种情况下,以下都是相同的

  • jenkins显示的系统信息
  • 引导类路径
  • JDK
  • jdk文件(这些是使用SVN部署的,所以我们知道它们是相同的)
  • yum安装(主要见下文)

注意 我可以通过转到脚本控制台并运行以下

来复制它
import org.apache.tools.ant.Location
Location l = new Location()

以良好的方式工作,并以与真实构建的方式相同的方式失败。

错误

java.io.IOException: remote file operation failed:... at 
hudson.remoting.Channel@35f2fb2:linengbld50: java.io.IOException: 
Remote call on linengbld50 failed
...
Caused by: java.io.IOException: Remote call on linengbld50 failed
...
Caused by: java.lang.NoClassDefFoundError: Could not initialize class
 org.apache.tools.ant.Location
...

百胜差异

Good v Bad

  • hiera.noarch 1:1.3.4-5 vs 1.3.4-1
  • net-snmp- * 1:5.7.2-24.el7_2.1 vs 1:5.7.2-24.el7
  • ruby​​-augeas 0.5.0-1 vs 0.4.1-3
  • zabbix 2.4.8 vs 2.4.7

仅限错误

  • python-chardet.noarch 2.2.1-1.el7_1
  • python-kitchen.noarch 1.1.1-5.el7
  • lsof的
  • yum-utils.noarch 1.1.31-34.el

1 个答案:

答案 0 :(得分:0)

使用脚本控制台是一个很好的调试工具,因为它在适当的环境中执行。在每个节点上获得which java的输出显示出差异。 @mmasi发现bad显示了一条路径,而good返回了null。

即使我们使用特定的JDK java运行slave,它也会在路径上找到第一个用于其活动的java(归档)。

  • 修改替代方案,将java设置为1.8(centos)

    sudo替代方案--install / usr / bin / java java \  /opt/tools/Java/jdk1.8.0_60/bin/java 1; java -version

  • 断开并重新连接节点(重启从站)

  • 重复小脚本控制台检查确定

  • 重复构建测试(存档文件的微小构建)确定