Jenkins Slave JNLP 连接被终止

Posted

技术标签:

【中文标题】Jenkins Slave JNLP 连接被终止【英文标题】:Jenkins Slave JNLP connection gets terminated 【发布时间】:2019-03-02 17:45:01 【问题描述】:

在这里寻求帮助!

我将 Jenkins(v2.134) 作为由 Rancher(v1.6.16) 管理的 docker 容器运行;我正在使用 haproxy(HA-Proxy 版本 1.6.3 2015/12/25)作为我的负载均衡器。 Jenkins JNLP端口配置为50000。haproxy得到了TCP端口转发规则(8081 > 50000)

我的奴隶(macmini)在不同的网络中并且在防火墙后面(这个网络可以到达我的詹金斯基础设施)。我正在使用“隧道连接通过”属性和指定端口“:8081”。 8081端口已经在防火墙中打开了。

我的 Jenkins Java 版本是 -

openjdk version "1.8.0_151"
OpenJDK Runtime Environment (build 1.8.0_151-8u151-b12-1~deb9u1-b12)

我的 Slave Java 版本是 -

Sun JDK "1.8.0_151"

这是代理日志 -

*INFO: Setting up agent: my-slave-01*
    Sep 26, 2018 2:48:50 PM hudson.remoting.jnlp.Main$CuiListener <init>
    INFO: Jenkins agent is running in headless mode.
    Sep 26, 2018 2:48:50 PM hudson.remoting.Engine startEngine
    INFO: Using Remoting version: 3.23
    Sep 26, 2018 2:48:50 PM hudson.remoting.Engine startEngine
    WARNING: No Working Directory. Using the legacy JAR Cache location: /Users/jenkins/.jenkins/cache/jars
    Sep 26, 2018 2:48:51 PM hudson.remoting.jnlp.Main$CuiListener status
    INFO: Locating server among [http://<My Jenkins URL>/]
    Sep 26, 2018 2:48:51 PM org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver resolve
    INFO: Remoting server accepts the following protocols: [JNLP4-connect, Ping]
    Sep 26, 2018 2:48:51 PM hudson.remoting.jnlp.Main$CuiListener status
    *INFO: Agent discovery successful*
     *Agent address: <My Jenkins DNS Name>*
     *Agent port:    8081*
     Identity:      b5:c7:33:8d:9c:97:41:3f:e1:b1:b5:31:25:ea:b5:2e
    Sep 26, 2018 2:48:51 PM hudson.remoting.jnlp.Main$CuiListener status
    INFO: Handshaking
    Sep 26, 2018 2:48:51 PM hudson.remoting.jnlp.Main$CuiListener status
    INFO: Connecting to <My Jenkins DNS>:8081
    Sep 26, 2018 2:48:51 PM hudson.remoting.jnlp.Main$CuiListener status
    INFO: Trying protocol: JNLP4-connect
    Sep 26, 2018 2:48:51 PM hudson.remoting.jnlp.Main$CuiListener status
    INFO: Remote identity confirmed: b5:c7:33:8d:9c:97:41:3f:e1:b1:b5:31:25:ea:b5:2e
    Sep 26, 2018 2:48:52 PM hudson.remoting.jnlp.Main$CuiListener status
    *INFO: Connected*
    Sep 26, 2018 2:48:54 PM org.jenkinsci.remoting.util.AnonymousClassWarnings warn
    WARNING: Attempt to (de-)serialize anonymous class org.jenkinsci.plugins.envinject.EnvInjectComputerListener$2; see: https://jenkins.io/redirect/serialization-of-anonymous-classes/
    Sep 26, 2018 2:49:49 PM hudson.remoting.jnlp.Main$CuiListener status
    *INFO: Terminated*

任何帮助将不胜感激。

有没有办法获得更详细的日志?

【问题讨论】:

【参考方案1】:

我发现了问题;这是我的负载均衡器(haproxy)默认的 TCP 连接超时(如果没有流量),它是 50000 毫秒。 https://cbonte.github.io/haproxy-dconv/configuration-1.5.html

但是,Jenkins 对从属设备的 ping 间隔,即 hudson.slaves.ChannelPinger.pingInterval 是 5 分钟(默认)。 https://wiki.jenkins.io/display/JENKINS/Features+controlled+by+system+properties

增加负载均衡器超时时间,即 > 5 分钟解决了这个问题。

【讨论】:

您找到获取更详细日志的方法了吗?我仍在努力解决这个问题。 在我们的例子中,它是 ELB 的超时设置。之前是默认的 60 秒。我将它设置为 4000 (amx) 并做到了。

以上是关于Jenkins Slave JNLP 连接被终止的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins slave-agent.jnlp运行无反应

Jenkins Linux 从属语言环境

应该如何使用 jenkinsci/jnlp-slave 进行复杂的构建?

jenkins配置slave节点 windows

[ci]jenkins-slave的添加

Jenkins调用容器中Slave实现弹性构建