Jenkins代理无法与控制器连接:确认序列不正确

svmlkihl  于 2023-11-17  发布在  Jenkins
关注(0)|答案(7)|浏览(233)

将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)

字符串
我们花了很多时间试图解决这个问题。不幸的是没有成功。
你知道是什么导致了这个问题,以及如何解决它吗?

uqdfh47h

uqdfh47h1#

我遇到了这个问题,我找到了解决办法。
我有一个通过EKS上的jenkins helm chart部署的jenkins master,它暴露在一个ALB后面的入口控制器中。我试图连接一个入站代理节点,上面出现了这个错误。
解决方案简而言之:只需在代理节点配置中勾选“使用WebSocket”选项(管理Jenkins ==>管理节点和云==>选择入站代理节点==>配置==>勾选“使用WebSocket”)
在我这样做之后-代理可以连接,错误就消失了。这是最优雅的解决方案,我相信它也更安全,因为当你使用它时你不需要保持50000 TCP端口打开,你可以继续使用Jenkins的主端口(我猜通常是443),

**注意:**您需要确保代理程序可以访问Jenkins主端口(通常为443或80)。

我是这样找到这个解决办法的:
此分类上一篇:https://docs.cloudbees.com/docs/cloudbees-ci/latest/cloud-setup-guide/configure-ports-jnlp-agents
这让我想到了这个:https://github.com/jenkinsci/jep/blob/master/jep/222/README.adoc
他们解释说,当你通过负载均衡器暴露jenkins时,你最好使用WebSocket选项(即使没有,使用WebSocket仍然更好,因为WebSocket比jnlp和额外的tcp端口更安全)

cotxawn7

cotxawn72#

我们最近在使用JNLP进行远程集成测试时遇到了这个问题。远程从站会回调到Jenkins主站,这个问题最终是一个动态生成的HTTP类型的AWS ELB,(因为Kubernetes ELB提供商目前不支持多协议ELB)对于Jenkins Master,我们必须手动将ELB的JNLP入口端口类型更改为TCP,而Web接口入口“示例端口”是协议HTTP,“负载均衡器”是协议HTTPS

vptzau2j

vptzau2j3#

Jenkins主示例是否在负载均衡器之后运行?当我的示例在AWS中的应用程序负载均衡器之后运行时,我遇到了同样的问题。
如果是这样,那么确认序列可能会因为负载均衡器中的不同协议而被修改。JNLP默认需要在端口50000上进行TCP连接。
如果您的设置是在AWS上,您可以尝试在Route 53中创建一个私有托管区域,并为Jenkins示例的私有IP地址创建一个DNS记录。
例如:jenkins.example.com->您的Jenkins示例的私有IP
然后在Jenkins UI ->管理Jenkins ->配置系统->管理节点和云->配置云->(高级设置下)

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

这避免了您的从代理必须通过负载均衡器连接到Jenkins Master。

jmo0nnb3

jmo0nnb34#

我在gcp上遇到这类问题,jenkins master在后面的负载均衡,几乎和Sidharth Ramesh的回复一样。
在configuration -> manage jenkins -> configure global security中,在“agent”部分,你必须配置一个特定的端口,千万不要选择random。我选择50222作为例子,
下面是代理协议:有一个复选框“TCP代理协议/4(TLS加密)",我们必须使启用.如果没有,有一个错误消息:“服务器报告协议jnlp 4-连接不支持跳过”
打开jenkins slave到jenkins master vm内部ip端口的防火墙。
享受

kmynzznz

kmynzznz5#

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

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

字符串
另外要检查安装的java版本是否> 7

zzwlnbp8

zzwlnbp86#

当Windows Update或其他静默后台更新扰乱了从站的环境变量时,我们就遇到了这种情况。必须重新添加HTTPS_PROXYHTTP_PROXY,一旦完成,我们就可以重新开始工作了。

kyxcudwk

kyxcudwk7#

信息:

Incorrect acknowledgement sequence ...

字符串
当我错误地将Java属性hudson.TcpSlaveAgentListener.port的值配置为与Jenkins使用的HTTP端口相同的端口号时,发生了这种情况。TcpSlaveAgentListener javadoc表示这是一个错误配置,它说:

除了HTTP端点之外,Jenkins还运行TcpSlaveAgent,它监听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)

相关问题