在两个 centos 7.1 系统上使用 Oracle JDK 1.8.0_60 时,其中一个 Jenkins Slave 无法收集工件并出现 NoClassDefFoundError

问题描述 投票:0回答:1

给我谜语:

使用 Oracle JDK 1.8 u60 Java 运行的两个几乎相同的 Jenkins 从属设备,其中一个无法收集工件并出现 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
...

百胜的区别

好与坏

  • hiera.noarch 1:1.3.4-5 vs 1.3.4-1
  • net-snmp-* 1:5.7.2-24.el7_2.1 与 1:5.7.2-24.el7
  • 红宝石-augeas 0.5.0-1 vs 0.4.1-3
  • zabbix 2.4.8 与 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
java jenkins centos jenkins-agent
1个回答
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 -版本

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

  • 重复小脚本控制台检查OK

  • 重复构建测试(存档文件的小型构建)OK

© www.soinside.com 2019 - 2024. All rights reserved.