12

将我们的 Jenkins 主安装更新到其最新的 LTS 版本 2.46.3 后,其中一个从属设备(Windows 7 机器,32 位)无法与主设备连接。

我们得到的错误是:

java -jar slave.jar -jnlpUrl https://<jenkins-name>/computer/<node-name>/slave-agent.jnlp -secret <secret-value>
Jun 22, 2017 1:19:05 PM hudson.remoting.jnlp.Main createEngine
INFO: Setting up slave: node-name
Jun 22, 2017 1:19:05 PM hudson.remoting.jnlp.Main$CuiListener <init>
INFO: Jenkins agent is running in headless mode.
Jun 22, 2017 1:19:05 PM hudson.remoting.jnlp.Main$CuiListener status
INFO: Locating server among [https://<jenkins-name>/]
Jun 22, 2017 1:19:05 PM org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver resolve
INFO: Remoting server accepts the following protocols: [JNLP3-connect, JNLP-connect, CLI2-connect, Ping, CLI-connect, JNLP4-connect, JNLP2-c
onnect]
Jun 22, 2017 1:19:05 PM hudson.remoting.jnlp.Main$CuiListener status
INFO: Agent discovery successful
  Agent address: <jenkins-name>
  Agent port:    <jenkins-port>
  Identity:      <id:en:ti:ty>
Jun 22, 2017 1:19:05 PM hudson.remoting.jnlp.Main$CuiListener status
INFO: Handshaking
Jun 22, 2017 1:19:05 PM hudson.remoting.jnlp.Main$CuiListener status
INFO: Connecting to <jenkins-name>:9150
Jun 22, 2017 1:19:05 PM hudson.remoting.jnlp.Main$CuiListener status
INFO: Trying protocol: JNLP4-connect
Jun 22, 2017 1:19:05 PM org.jenkinsci.remoting.protocol.impl.AckFilterLayer abort
WARNING: [JNLP4-connect connection to <our-proxy>/10.253.0.11:81] Incorrect acknowledgement sequence, expected 0x0003414333 got 0x4854545044
Jun 22, 2017 1:19:05 PM hudson.remoting.jnlp.Main$CuiListener status
INFO: Protocol JNLP4-connect encountered an unexpected exception
java.util.concurrent.ExecutionException: org.jenkinsci.remoting.protocol.impl.ConnectionRefusalException: Connection closed before acknowled
gement sent
        at org.jenkinsci.remoting.util.SettableFuture.get(SettableFuture.java:223)
        at hudson.remoting.Engine.innerRun(Engine.java:385)
        at hudson.remoting.Engine.run(Engine.java:287)
Caused by: org.jenkinsci.remoting.protocol.impl.ConnectionRefusalException: Connection closed before acknowledgement sent
        at org.jenkinsci.remoting.protocol.impl.AckFilterLayer.onRecvClosed(AckFilterLayer.java:280)
        at org.jenkinsci.remoting.protocol.FilterLayer.abort(FilterLayer.java:164)
        at org.jenkinsci.remoting.protocol.impl.AckFilterLayer.abort(AckFilterLayer.java:130)
        at org.jenkinsci.remoting.protocol.impl.AckFilterLayer.onRecv(AckFilterLayer.java:258)
        at org.jenkinsci.remoting.protocol.ProtocolStack$Ptr.onRecv(ProtocolStack.java:669)
        at org.jenkinsci.remoting.protocol.NetworkLayer.onRead(NetworkLayer.java:136)
        at org.jenkinsci.remoting.protocol.impl.BIONetworkLayer.access$2200(BIONetworkLayer.java:48)

我们花了很多时间试图解决这个问题。不幸的是没有成功。

您是否知道可能导致问题的原因以及如何解决?

4

6 回答 6

3

我们最近使用基于 AWS 的 Jenkins 使用 JNLP 进行远程集成测试解决了这个问题。远程从站将回调 Jenkins 主站,后者因类似错误而失败。问题最终是 Jenkins Master 动态生成的 HTTP 类型的 AWS ELB(因为 Kubernetes ELB 配置器目前不支持多协议 ELB)。我们必须手动将 ELB 的 JNLP 入口端口类型更改为TCP,而 Web 界面入口“实例端口”是协议HTTP,“负载均衡器”是协议HTTPS

于 2018-02-06T16:17:22.277 回答
2

Jenkins 主实例是否在负载均衡器后面运行?当我的实例在 AWS 中的 Application Load Balancer 后面运行时,我遇到了同样的问题。

如果是这样,那么确认序列可能会因为负载均衡器中的不同协议而被修改。默认情况下,JNLP 需要端口 50000 上的 TCP 连接。

如果您的设置是在 AWS 上,您可以尝试在 Route53 中创建一个私有托管区域,并为您的 Jenkins 实例的私有 IP 地址创建一个别名记录。

例如:jenkins.example.com -> 你的 Jenkins 实例的私有 IP

然后,在Jenkins UI -> 管理 Jenkins -> 配置系统 -> 管理节点和云 -> 配置云 ->(在高级设置下)

隧道连接通过:jenkins.example.com:50000

这样可以避免您的从代理必须通过负载均衡器才能连接到 Jenkins Master。

于 2020-11-12T12:52:52.603 回答
0

消息:

Incorrect acknowledgement sequence ...

当我错误地将 Java 属性的值配置为hudson.TcpSlaveAgentListener.port与 Jenkins 使用的 HTTP 端口相同的端口号时,发生在我身上。TcpSlaveAgentListener javadoc表明这是一个错误配置,当它说:

除了 HTTP 端点,Jenkins 还运行 TcpSlaveAgentListener 来监听 TCP 套接字。从历史上看,这用于来自代理的入站连接(因此得名),但随着时间的推移,它被扩展并变得通用,因此不同目的的多个协议可以在同一个套接字上共存。(重点补充)

如果 HTTP 端口是 8080 并且hudson.TcpSlaveAgentListener.port也是 8080,那么我的 JNLP 代理无法连接。一旦我分配了另一个值hudson.TcpSlaveAgentListener.port(如 50000)并重新启动 Jenkins,我的 JNLP 代理就能够连接。

失败的 JNLP 代理上的堆栈跟踪是:

INFO: Trying protocol: JNLP4-connect
Mar 02, 2019 3:49:29 PM org.jenkinsci.remoting.protocol.impl.AckFilterLayer abort
WARNING: [JNLP4-connect connection to agent.example.com/172.16.16.113:8080] Incorrect acknowledgement sequence, expected 0x000341434b got 0x485454502f
Mar 02, 2019 3:49:29 PM hudson.remoting.jnlp.Main$CuiListener status
INFO: Protocol JNLP4-connect encountered an unexpected exception
java.util.concurrent.ExecutionException: org.jenkinsci.remoting.protocol.impl.ConnectionRefusalException: Connection closed before acknowledgement sent
        at org.jenkinsci.remoting.util.SettableFuture.get(SettableFuture.java:223)
        at hudson.remoting.Engine.innerRun(Engine.java:614)
        at hudson.remoting.Engine.run(Engine.java:474)
Caused by: org.jenkinsci.remoting.protocol.impl.ConnectionRefusalException: Connection closed before acknowledgement sent
        at org.jenkinsci.remoting.protocol.impl.AckFilterLayer.onRecvClosed(AckFilterLayer.java:280)
        at org.jenkinsci.remoting.protocol.FilterLayer.abort(FilterLayer.java:164)
        at org.jenkinsci.remoting.protocol.impl.AckFilterLayer.abort(AckFilterLayer.java:130)
        at org.jenkinsci.remoting.protocol.impl.AckFilterLayer.onRecv(AckFilterLayer.java:258)
        at org.jenkinsci.remoting.protocol.ProtocolStack$Ptr.onRecv(ProtocolStack.java:668)
        at org.jenkinsci.remoting.protocol.NetworkLayer.onRead(NetworkLayer.java:136)
        at org.jenkinsci.remoting.protocol.impl.BIONetworkLayer.access$2200(BIONetworkLayer.java:48)
        at org.jenkinsci.remoting.protocol.impl.BIONetworkLayer$Reader.run(BIONetworkLayer.java:283)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at hudson.remoting.Engine$1.lambda$newThread$0(Engine.java:93)
        at java.lang.Thread.run(Unknown Source)

Mar 02, 2019 3:49:29 PM hudson.remoting.jnlp.Main$CuiListener status
INFO: Connecting to testing-a.markwaite.net:8080
Mar 02, 2019 3:49:29 PM hudson.remoting.jnlp.Main$CuiListener status
INFO: Server reports protocol JNLP4-plaintext not supported, skipping
Mar 02, 2019 3:49:29 PM hudson.remoting.jnlp.Main$CuiListener status
INFO: Server reports protocol JNLP3-connect not supported, skipping
Mar 02, 2019 3:49:29 PM hudson.remoting.jnlp.Main$CuiListener status
INFO: Server reports protocol JNLP2-connect not supported, skipping
Mar 02, 2019 3:49:29 PM hudson.remoting.jnlp.Main$CuiListener status
INFO: Server reports protocol JNLP-connect not supported, skipping
Mar 02, 2019 3:49:29 PM hudson.remoting.jnlp.Main$CuiListener error
SEVERE: The server rejected the connection: None of the protocols were accepted
java.lang.Exception: The server rejected the connection: None of the protocols were accepted
        at hudson.remoting.Engine.onConnectionRejected(Engine.java:682)
        at hudson.remoting.Engine.innerRun(Engine.java:639)
        at hudson.remoting.Engine.run(Engine.java:474)
于 2019-03-02T23:02:27.093 回答
0

您需要检查节点的密钥是否完整。如果不正确,您必须下载 slave.jar 并使用新的 jar 文件从命令行运行代理。

java -jar slave.jar -jnlpUrl http://<ipaddress>:8080/computer/<computername>/slave-agent.jnlp -secret 340d54sdrgtjj334kelkahsdjkf83f1c5120dc2fb74939fcdb7f05e1926049f8d7991

还要检查安装的java版本是否> 7

于 2017-08-29T12:58:08.290 回答
0

我在gcp上遇到这种问题,jenkins master behind load balance,和Sidharth Ramesh回复的差不多。

在配置 -> 管理 jenkins -> 配置全局安全,在“代理”部分,你必须配置一个特定的端口,不要随机选择。我选择50222为例,

下面是代理协议:有一个“入站 TCP 代理协议/4(TLS 加密)”复选框,我们必须启用。如果不是,则会出现错误消息:“服务器报告协议 jnlp4-connect 不支持跳过”

打开从jenkins slave到jenkins master vm内部ip的端口的防火墙。

请享用

于 2021-05-25T07:50:15.257 回答
0

当 Windows 更新或其他静默后台更新与从属设备的环境变量混淆时,我们就会遇到这种情况。HTTPS_PROXY并且HTTP_PROXY必须重新添加,一旦完成,我们就恢复了业务。

于 2019-02-21T22:59:38.380 回答