我目前在构建中看到一组错误。
如果你释放了詹金斯(比如说盒子碰撞,或者致命一击-9),这是预期的行为吗?
还是发生了更糟糕的事情(比如网络连接不好)?
堆栈和错误为:
hudson.remoting.RemoteInvocationHandler.invoke(RemoteInvocationHandler.java:158)
at $Proxy175.join(Unknown Source) at
hudson.Launcher$RemoteLauncher$ProcImpl.join(Launcher.java:861) at
hudson.Launcher$ProcStarter.join(Launcher.java:345) at
hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:82)
at
hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:58)
at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:19)
at
hudson.model.AbstractBuild$AbstractRunner.perform(AbstractBuild.java:703)
at hudson.model.Build$RunnerImpl.build(Build.java:178) at
hudson.model.Build$RunnerImpl.doRun(Build.java:139) at
hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:473)
at hudson.model.Run.run(Run.java:1410) at
hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46) at
hudson.model.ResourceController.execute(ResourceController.java:88)
at hudson.model.Executor.run(Executor.java:238) Caused by:
hudson.remoting.RequestAbortedException: java.io.IOException:
Unexpected termination of the channel at
hudson.remoting.Request.abort(Request.java:273) at
hudson.remoting.Channel.terminate(Channel.java:732) at
hudson.remoting.Channel$ReaderThread.run(Channel.java:1157) Caused by:
java.io.IOException: Unexpected termination of the channel at
hudson.remoting.Channel$ReaderThread.run(Channel.java:1133) Caused by:
java.io.EOFException at
java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2554)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1297)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at hudson.remoting.Channel$ReaderThread.run(Channel.java:1127)
如果Jenkins主失去与从的连接,您将看到该错误。这可能是由于您上面列出的三个问题中的任何一个:
-
手动杀死从进程
-
从属服务器变得不可用
-
主和从之间的网络问题
我通过简单地重新启动主Jenkins服务器就解决了这个问题。
由于1.520,Jenkins需要Java 6或更高版本,出现此错误的可能性之一是您在slave/remote上没有Java 6或更新版本。解决方案是用java6或更高版本更新远程机器,或者设置SSH登录到从属机器时使用的正确环境变量。
您可以看到这个错误的另一件事(实际上导致了这个错误)是缺少用于构建的内存/cpu内核。我花了一些时间测试它,并在我们的网站上通过增加java堆大小(以及为机器添加更多内存)、增加内核数量(因此一台机器至少有4G的RAM,其中两个内核可用于一个构建插槽),以及对可同时运行的打开文件描述符和进程数量进行一些调整(如果您在linux上)来解决这个问题。
我使用的Jenkins 1.531的java版本必须是1.6(最新)或更新版本。
对于我的一个从属节点,我发现我必须在节点的"启动方法"高级按钮"JavaPath"中设置Java路径,然后才能正常工作。问题是节点一直使用旧版本的Java,我无法升级。
对我来说,节点配置有一个错误的"远程FS根"。因此,请检查该从属节点的master上的所有配置参数是否正确。詹金斯没有抱怨任何事情,但终止了连接。
在确定这是节点配置之前,我挣扎了很多。至少主机上的错误消息应该更明确或更具信息性。
如果您使用aws ELB进行jenkins master和jenkins slave通信,则ELB空闲时间会导致此问题。请使用更新您的空闲时间http://docs.aws.amazon.com/elasticloadbalancing/latest/classic/config-idle-timeout.html#config-空闲超时控制台
将其设置为60秒以上
我知道这个问题有点老了,但前几天我遇到了这个问题。
对我来说,这个问题发生在JDK的安装过程中。安装失败,因为设置了Windows的安全设置,所以弹出了一个通知框,上面写着:"您需要授予此操作的权限",导致安装失败。
我将通知设置更改为"从不通知",它解决了这个问题。
当我将Jenkins从2.1.5升级到2.9.2版本时,我遇到了类似的Jenkins Slaves终止的问题。
通过在Centos上安装Java 8版本,修复了所有与升级相关的问题,如Slave的意外终止。
百胜安装java-1.8.0-openjdk-devel
在CentOS Linux 7上,我发现Jenkins slave无法与OpenJDK一起工作。我试过Java 7和8。它需要Oracle Java。
因此,如果你在Linux上,安装OracleJava,并设置指向它的路径
- 为启动从属服务器的用户设置
$JAVA_HOME
,并将其添加到$PATH
- 使用
update-alternatives
设置默认的java
- 在Jenkins中的节点的
Advanced
设置下设置JavaPath