Jenkins Windows从属连接因java.nio.channels.ClosedChannelException而终止

yug*_*yug 7 ssl nio jenkins jenkins-slave

虽然连接到Windows机器作为奴隶,我得到跟随错误我认为它的一些网络相关的问题,但需要一些帮助从哪里开始寻找或什么是可能的解决方案.

INFO: Terminated
Aug 01, 2017 10:15:54 PM hudson.remoting.JarCacheSupport$1 run
WARNING: Failed to resolve a jar 06bcb4519543f5ec83cf9d6da9f6cfbe
java.io.IOException: Failed to write to C:\Users\Administrator\.jenkins\cache\jars\06\BCB4519543F5EC83CF9D6DA9F6CFBE.jar
        at hudson.remoting.FileSystemJarCache.retrieve(FileSystemJarCache.java:133)
        at hudson.remoting.JarCacheSupport$1.run(JarCacheSupport.java:64)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:483)
        at java.util.concurrent.FutureTask.run(FutureTask.java:274)
        at hudson.remoting.AtmostOneThreadExecutor$Worker.run(AtmostOneThreadExecutor.java:110)
        at java.lang.Thread.run(Thread.java:809)
Caused by: java.io.IOException: Backing channel 'JNLP4-connect connection to dr2r4m1p21/172.20.238.41:9001' is disconnected.
        at hudson.remoting.RemoteInvocationHandler.channelOrFail(RemoteInvocationHandler.java:192)
        at hudson.remoting.RemoteInvocationHandler.invoke(RemoteInvocationHandler.java:257)
        at com.sun.proxy.$Proxy4.writeJarTo(Unknown Source)
        at hudson.remoting.FileSystemJarCache.retrieve(FileSystemJarCache.java:98)
        ... 5 more
Caused by: java.nio.channels.ClosedChannelException
        at org.jenkinsci.remoting.protocol.impl.ChannelApplicationLayer.onReadClosed(ChannelApplicationLayer.java:208)
        at org.jenkinsci.remoting.protocol.ApplicationLayer.onRecvClosed(ApplicationLayer.java:222)
        at org.jenkinsci.remoting.protocol.ProtocolStack$Ptr.onRecvClosed(ProtocolStack.java:832)
        at org.jenkinsci.remoting.protocol.FilterLayer.onRecvClosed(FilterLayer.java:287)
        at org.jenkinsci.remoting.protocol.impl.SSLEngineFilterLayer.onRecvClosed(SSLEngineFilterLayer.java:181)
        at org.jenkinsci.remoting.protocol.impl.SSLEngineFilterLayer.switchToNoSecure(SSLEngineFilterLayer.java:283)
        at org.jenkinsci.remoting.protocol.impl.SSLEngineFilterLayer.processWrite(SSLEngineFilterLayer.java:503)
        at org.jenkinsci.remoting.protocol.impl.SSLEngineFilterLayer.processQueuedWrites(SSLEngineFilterLayer.java:248)
        at org.jenkinsci.remoting.protocol.impl.SSLEngineFilterLayer.doSend(SSLEngineFilterLayer.java:200)
        at org.jenkinsci.remoting.protocol.impl.SSLEngineFilterLayer.onRecvClosed(SSLEngineFilterLayer.java:166)
        at org.jenkinsci.remoting.protocol.ProtocolStack$Ptr.onRecvClosed(ProtocolStack.java:832)
        at org.jenkinsci.remoting.protocol.NetworkLayer.onRecvClosed(NetworkLayer.java:154)
        at org.jenkinsci.remoting.protocol.impl.BIONetworkLayer.access$1500(BIONetworkLayer.java:48)
        at org.jenkinsci.remoting.protocol.impl.BIONetworkLayer$Reader.run(BIONetworkLayer.java:247)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1157)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:627)
        at hudson.remoting.Engine$1$1.run(Engine.java:94)
        ... 1 more
Run Code Online (Sandbox Code Playgroud)

上面提到的堆栈跟踪来自salve(Windows)机器,我的Jenkins/Master在RHEL上运行,我能够在那里看到以下堆栈跟踪.

INFO: Accepted JNLP4-connect connection #113 from /172.20.238.31:60363
Aug 01, 2017 12:45:55 PM jenkins.slaves.DefaultJnlpSlaveReceiver channelClosed
WARNING: Computer.threadPoolForRemoting [#42] for Build_Agent terminated
java.nio.channels.ClosedChannelException
        at org.jenkinsci.remoting.protocol.impl.ChannelApplicationLayer.onReadClosed(ChannelApplicationLayer.java:208)
        at org.jenkinsci.remoting.protocol.ApplicationLayer.onRecvClosed(ApplicationLayer.java:222)
        at org.jenkinsci.remoting.protocol.ProtocolStack$Ptr.onRecvClosed(ProtocolStack.java:832)
        at org.jenkinsci.remoting.protocol.FilterLayer.onRecvClosed(FilterLayer.java:287)
        at org.jenkinsci.remoting.protocol.impl.SSLEngineFilterLayer.onRecvClosed(SSLEngineFilterLayer.java:181)
        at org.jenkinsci.remoting.protocol.impl.SSLEngineFilterLayer.switchToNoSecure(SSLEngineFilterLayer.java:283)
        at org.jenkinsci.remoting.protocol.impl.SSLEngineFilterLayer.processWrite(SSLEngineFilterLayer.java:503)
        at org.jenkinsci.remoting.protocol.impl.SSLEngineFilterLayer.processQueuedWrites(SSLEngineFilterLayer.java:248)
        at org.jenkinsci.remoting.protocol.impl.SSLEngineFilterLayer.doSend(SSLEngineFilterLayer.java:200)
        at org.jenkinsci.remoting.protocol.impl.SSLEngineFilterLayer.doCloseSend(SSLEngineFilterLayer.java:213)
        at org.jenkinsci.remoting.protocol.ProtocolStack$Ptr.doCloseSend(ProtocolStack.java:800)
        at org.jenkinsci.remoting.protocol.ApplicationLayer.doCloseWrite(ApplicationLayer.java:173)
        at org.jenkinsci.remoting.protocol.impl.ChannelApplicationLayer$ByteBufferCommandTransport.closeWrite(ChannelApplicationLayer.java:311)
        at hudson.remoting.Channel.close(Channel.java:1295)
        at hudson.remoting.Channel.close(Channel.java:1263)
        at jenkins.slaves.DefaultJnlpSlaveReceiver.afterChannel(DefaultJnlpSlaveReceiver.java:173)
        at org.jenkinsci.remoting.engine.JnlpConnectionState$4.invoke(JnlpConnectionState.java:421)
        at org.jenkinsci.remoting.engine.JnlpConnectionState.fire(JnlpConnectionState.java:312)
        at org.jenkinsci.remoting.engine.JnlpConnectionState.fireAfterChannel(JnlpConnectionState.java:418)
        at org.jenkinsci.remoting.engine.JnlpProtocol4Handler$Handler$1.run(JnlpProtocol4Handler.java:334)
        at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)

njt*_*man 12

我遇到了与OP相似的错误,其中与我的奴隶的连接正在下降.问题的根本原因不是由于Jenkins从站和主控主机之间的Java版本不匹配.

解决方案 如果您在Elastic Load Balancer(ELB)后面的AWS上的EC2实例中运行Jenkins,请将"attributes"部分下的"idle timeout"值从默认的60秒增加.我将新值设置为600,不再出现错误.

看来,如果构建过程中的单个命令花费的时间超过60秒而没有日志输出,则ELB将因空闲活动而终止会话.

资料来源:https://issues.jenkins-ci.org/browse/JENKINS-44001?focusCommentId = 312412&page = com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-312412


mb-*_*xas 8

  • 在我们的jenkins master更新后,我发现了同样的错误.这可能是由于Java 7(v80)和最新的Java 8之间不兼容.
  • 检查主服务器使用的java版本以及从服务器的java版本.
  • 在我的例子中,我在linux主机上运行swarm-client-2.0-jar-with-dependencies.jar,它使用的是Java 7.

    java版"1.7.0_80"Java(TM)SE运行时环境(版本1.7.0_80-b15)Java HotSpot(TM)64位服务器VM(版本24.80-b11,混合模式)

  • 我们的jenkins master已升级,现在正在运行Java 8

    java版"1.8.0_121"Java(TM)SE运行时环境(版本1.8.0_121-b13)Java HotSpot(TM)64位服务器VM(版本25.121-b13,混合模式)

  • 当slave上的java更新为Java 8时,连接问题就消失了.


小智 5

我遇到了同样的问题。我发现,如果您的作业没有针对 GUI 运行,Windows 从站会切换到“睡眠”模式。

  • 对于 Windows ......鼠标或键盘没有移动意味着没有活动。

然后就顺利解决了。在 Windows7 从站上,这是我所做的:

  • 控制面板\硬件和声音\电源选项
  • 显示附加计划
  • 选择高性能

  • 控制面板\硬件和声音\电源选项\编辑计划设置

  • 从不关闭显示器
  • 更改高级电源设置--> 10000 分钟后关闭硬盘

这个程序后应该没问题


dsa*_*don 5

除了帖子中的错误日志,我还在从属服务器的jenkins目录下获得了错误日志(对我来说是C:\ jenkins \ jenkins-slave.err.log):

JNLP文件 http://jenkins.domain.com/computer/my_slave_name/slave-agent.jnlp?encrypt=true 包含无效参数:[##################### #################,my_slave_name,-workDir,c:\ jenkins,-internalDir,远程处理,-url, http ://jenkins.domain.com/,-headless, -jar-cache,C:\ Users \ Administrator.jenkins \ cache \ jars]最有可能是主“ -workDir”中的配置错误不是有效的选项

我的解决方案:

1)窗口从属级别:关闭服务在GUI控制台对所有用户-这是必须的。由于某种原因,Microsoft锁定了Windows服务的安装/删除

2)Windows从属级别:杀死所有JavaJenkins-slave进程(如果存在)

3)窗口奴级: 删除詹金斯从设备服务(如果存在)从CMD: sc delete jenkinsslave-c__jenkins /force(对我来说)

4)Windows从属级别:验证您是否安装了Java 8:我正在使用jdk1.8.0_151卸载所有旧的 Java版本

5)jenkins主用户界面级别:在从属配置下更改Jenkins连接到从属的方式->启动方法:(Let Jenkins control this Windows slave as a Windows service而不是Launch agent via Java Web Start

6)AWS级: 增加AWS ELB空闲超时600(从60) -等@njtman建议

7)詹金斯主UI级别:重新启动代理在詹金斯和等待几分钟。

我的环境:

詹金斯:2.89.2,操作系统:Windows 2012 R2,Java:jdk1.8.0_151