詹金斯奴隶作业在"Unexpected termination of channel"上失败



我目前在构建中看到一组错误。

如果你释放了詹金斯(比如说盒子碰撞,或者致命一击-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

相关内容