jenkins奴隶工作失败的“意外终止渠道”
我目前正在看到我的构build中的一组错误。
这是预期的行为,如果你松了jenkins(说到盒子崩溃,或杀死-9)?
还是有更糟糕的事情发生(如一个不好的networking连接)?
堆栈和错误是:
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主站失去与从站的连接,您将看到该错误。 这可能是由于上面列出的三个问题中的任何一个:
-
手工杀死奴隶的过程
-
从属服务器变得不可用
-
主站和从站之间的networking问题
从1.520开始,Jenkins需要Java 6或更高版本,这个错误的可能性之一就是你没有java 6或更高版本的slave / remote。 解决方法是使用java 6或更高版本更新远程计算机,或设置SSH在login到slave计算机时使用的正确的环境variables。
我解决了主Jenkins服务器的简单重启。
Java的版本必须是1.6(最新)或更新的jenkins1.531,我正在使用。
对于我的一个从节点,我发现必须在“启动方法”高级button“JavaPath”中为节点设置Javapath,才能正常工作。 问题是节点保持使用较旧版本的Java,我无法升级。
对于我来说节点configuration有一个错误的“远程FS根”。 因此,检查该从站节点的主站上的所有configuration参数是否正确。 jenkins不抱怨一件事,但终止连接。
在确定它是节点configuration之前,我挣扎了很多。 至less主人的错误信息应该是更明确或信息。
另外一个你可以看到这个错误(实际上导致这个错误)的地方是缺less内存/ CPU的内核。 我花了一些时间testing它,并通过增加Java堆大小(以及增加更多的内存到机器),增加了内核的数量(所以一台机器至less有4G内存与两个核心可用与一个构build插槽),还可以调整一些可以同时运行的打开的文件描述符和进程(如果你在linux上)。
我知道这个问题有点老,但是前些天我遇到了这个问题。
对于我来说,在安装JDK的过程中发生了问题。 安装失败是因为Windows的安全设置已设置,因此出现以下提示框:“您需要为此操作提供权限”,popup窗口,导致安装失败。
我将通知设置更改为“从不通知”,并解决了这个问题。
在CentOS Linux 7上,我发现Jenkins从站不能用于OpenJDK。 我试过Java 7和8.它需要Oracle Java。
因此,如果您在Linux上,请安装Oracle Java,并将path设置为指向它。 你可以用很多方法来做到这一点,例如:
- 为启动slave的用户设置
$JAVA_HOME
,并将其添加到$PATH
。 - 使用
update-alternatives
来设置默认的java
。 - 在Jenkins节点的
Advanced
设置下设置JavaPath
。