jenkins-cli 构建触发器连接超时 运行 作业
jenkins-cli build trigger connection times out for long running jobs
我使用 udeploy Shell 步骤中的 followig 命令来调用 Jenkins 作业。我需要等待作业完成,然后继续在 udeploy 中执行进一步的步骤。
无论我是直接从服务器上的 shell 还是从 Udeploy 中的 Shell 步骤调用 jenkins 作业,问题都是一样的。
命令:-
java -jar jenkins-cli.jar -s -remoting build -s --username --password ''
短 运行 作业的输出(几分钟)
Aug 03, 2018 3:55:09 PM hudson.cli.CLI _main
WARNING: Failed to authenticate with your SSH keys. Proceeding as anonymous
Started Job » SleepJob #4
Completed Job #4 : SUCCESS
长 运行 作业的输出(不确定它到底在哪里失败,但已经注意到这个作业 运行 一个小时)
*詹金斯的工作完成得很好
*返回到shell的状态是这个
Aug 03, 2018 11:42:53 AM hudson.cli.CLI _main
WARNING: Failed to authenticate with your SSH keys. Proceeding as anonymous
Started Job #1
Aug 03, 2018 1:54:36 PM hudson.remoting.SynchronousCommandTransport$ReaderThread run
SEVERE: I/O error in channel CLI connection to <URL>
java.net.SocketException: Connection timed out (Read failed)
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:171)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at java.io.FilterInputStream.read(FilterInputStream.java:133)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
at javax.crypto.CipherInputStream.getMoreData(CipherInputStream.java:114)
at javax.crypto.CipherInputStream.read(CipherInputStream.java:239)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
at java.io.BufferedInputStream.read(BufferedInputStream.java:265)
at hudson.remoting.FlightRecorderInputStream.read(FlightRecorderInputStream.java:91)
at hudson.remoting.ChunkedInputStream.readHeader(ChunkedInputStream.java:72)
at hudson.remoting.ChunkedInputStream.readUntilBreak(ChunkedInputStream.java:103)
at hudson.remoting.ChunkedCommandTransport.readBlock(ChunkedCommandTransport.java:39)
at hudson.remoting.AbstractSynchronousByteArrayCommandTransport.read(AbstractSynchronousByteArrayCommandTransport.java:35)
at hudson.remoting.SynchronousCommandTransport$ReaderThread.run(SynchronousCommandTransport.java:63)
hudson.remoting.RequestAbortedException: java.net.SocketException: Connection timed out (Read failed)
at hudson.remoting.Request.abort(Request.java:329)
at hudson.remoting.Channel.terminate(Channel.java:992)
at hudson.remoting.SynchronousCommandTransport$ReaderThread.run(SynchronousCommandTransport.java:96)
Suppressed: hudson.remoting.Channel$CallSiteStackTrace: Remote call to CLI connection to <URL>
at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1693)
at hudson.remoting.Request.call(Request.java:192)
at hudson.remoting.Channel.call(Channel.java:907)
at hudson.remoting.RemoteInvocationHandler.invoke(RemoteInvocationHandler.java:281)
at com.sun.proxy.$Proxy3.main(Unknown Source)
at hudson.cli.CLI.execute(CLI.java:380)
at hudson.cli.CLI._main(CLI.java:644)
at hudson.cli.CLI.main(CLI.java:426)
Caused by: java.net.SocketException: Connection timed out (Read failed)
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:171)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at java.io.FilterInputStream.read(FilterInputStream.java:133)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
at javax.crypto.CipherInputStream.getMoreData(CipherInputStream.java:114)
at javax.crypto.CipherInputStream.read(CipherInputStream.java:239)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
at java.io.BufferedInputStream.read(BufferedInputStream.java:265)
at hudson.remoting.FlightRecorderInputStream.read(FlightRecorderInputStream.java:91)
at hudson.remoting.ChunkedInputStream.readHeader(ChunkedInputStream.java:72)
at hudson.remoting.ChunkedInputStream.readUntilBreak(ChunkedInputStream.java:103)
at hudson.remoting.ChunkedCommandTransport.readBlock(ChunkedCommandTransport.java:39)
at hudson.remoting.AbstractSynchronousByteArrayCommandTransport.read(AbstractSynchronousByteArrayCommandTransport.java:35)
at hudson.remoting.SynchronousCommandTransport$ReaderThread.run(SynchronousCommandTransport.java:63)
出于测试目的,甚至在从属配置上也没有设置空闲时间。
jenkins 作业完成 12 分钟后抛出错误消息。即使作业需要 4 小时,它也会成功执行作业并在最后抛出错误。
如果连接断开,则错误会在问题发生时出现,而不总是在作业完成后出现。
我应该检查什么 network/firewall 来解决这个问题?我们没有为从属连接设置任何特定端口。
tcpdump 非常大,持续时间较长,可以检查它何时真正下降。
有什么更好的方法来解决问题。
听起来您的 Jenkins 主服务器和从服务器之间有什么东西正在断开您的会话。那个或者你的奴隶在你的构建过程中没有反应。我让 Jenkins 构建长达 24 小时都没有问题,对构建的长度没有任何严格的限制。
如果我不得不猜测您在主从之间有一个 VPN 隧道或 NAT 网关,并且由于构建没有向主报告任何内容,因此没有任何内容被发送。 VPN 和 NAT 网关将定期结束在给定时间间隔内不发送任何数据的连接,以清除它们的连接表。 SSH 有一个内置的 keepalive 功能来解决这个问题。
在你的 build slave 上尝试 setting the following in /etc/ssh/ssh_config(假设你使用的是 openssh):
ServerAliveInterval 300
这将告诉您的从站每 5 分钟发送一个 no_op 数据包,以确保中间网络设备不会终止您的连接。
看起来不像Jenkins supports setting keepalive on the master side yet。
我使用 udeploy Shell 步骤中的 followig 命令来调用 Jenkins 作业。我需要等待作业完成,然后继续在 udeploy 中执行进一步的步骤。
无论我是直接从服务器上的 shell 还是从 Udeploy 中的 Shell 步骤调用 jenkins 作业,问题都是一样的。
命令:- java -jar jenkins-cli.jar -s -remoting build -s --username --password ''
短 运行 作业的输出(几分钟)
Aug 03, 2018 3:55:09 PM hudson.cli.CLI _main
WARNING: Failed to authenticate with your SSH keys. Proceeding as anonymous
Started Job » SleepJob #4
Completed Job #4 : SUCCESS
长 运行 作业的输出(不确定它到底在哪里失败,但已经注意到这个作业 运行 一个小时) *詹金斯的工作完成得很好 *返回到shell的状态是这个
Aug 03, 2018 11:42:53 AM hudson.cli.CLI _main
WARNING: Failed to authenticate with your SSH keys. Proceeding as anonymous
Started Job #1
Aug 03, 2018 1:54:36 PM hudson.remoting.SynchronousCommandTransport$ReaderThread run
SEVERE: I/O error in channel CLI connection to <URL>
java.net.SocketException: Connection timed out (Read failed)
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:171)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at java.io.FilterInputStream.read(FilterInputStream.java:133)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
at javax.crypto.CipherInputStream.getMoreData(CipherInputStream.java:114)
at javax.crypto.CipherInputStream.read(CipherInputStream.java:239)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
at java.io.BufferedInputStream.read(BufferedInputStream.java:265)
at hudson.remoting.FlightRecorderInputStream.read(FlightRecorderInputStream.java:91)
at hudson.remoting.ChunkedInputStream.readHeader(ChunkedInputStream.java:72)
at hudson.remoting.ChunkedInputStream.readUntilBreak(ChunkedInputStream.java:103)
at hudson.remoting.ChunkedCommandTransport.readBlock(ChunkedCommandTransport.java:39)
at hudson.remoting.AbstractSynchronousByteArrayCommandTransport.read(AbstractSynchronousByteArrayCommandTransport.java:35)
at hudson.remoting.SynchronousCommandTransport$ReaderThread.run(SynchronousCommandTransport.java:63)
hudson.remoting.RequestAbortedException: java.net.SocketException: Connection timed out (Read failed)
at hudson.remoting.Request.abort(Request.java:329)
at hudson.remoting.Channel.terminate(Channel.java:992)
at hudson.remoting.SynchronousCommandTransport$ReaderThread.run(SynchronousCommandTransport.java:96)
Suppressed: hudson.remoting.Channel$CallSiteStackTrace: Remote call to CLI connection to <URL>
at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1693)
at hudson.remoting.Request.call(Request.java:192)
at hudson.remoting.Channel.call(Channel.java:907)
at hudson.remoting.RemoteInvocationHandler.invoke(RemoteInvocationHandler.java:281)
at com.sun.proxy.$Proxy3.main(Unknown Source)
at hudson.cli.CLI.execute(CLI.java:380)
at hudson.cli.CLI._main(CLI.java:644)
at hudson.cli.CLI.main(CLI.java:426)
Caused by: java.net.SocketException: Connection timed out (Read failed)
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:171)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at java.io.FilterInputStream.read(FilterInputStream.java:133)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
at javax.crypto.CipherInputStream.getMoreData(CipherInputStream.java:114)
at javax.crypto.CipherInputStream.read(CipherInputStream.java:239)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
at java.io.BufferedInputStream.read(BufferedInputStream.java:265)
at hudson.remoting.FlightRecorderInputStream.read(FlightRecorderInputStream.java:91)
at hudson.remoting.ChunkedInputStream.readHeader(ChunkedInputStream.java:72)
at hudson.remoting.ChunkedInputStream.readUntilBreak(ChunkedInputStream.java:103)
at hudson.remoting.ChunkedCommandTransport.readBlock(ChunkedCommandTransport.java:39)
at hudson.remoting.AbstractSynchronousByteArrayCommandTransport.read(AbstractSynchronousByteArrayCommandTransport.java:35)
at hudson.remoting.SynchronousCommandTransport$ReaderThread.run(SynchronousCommandTransport.java:63)
出于测试目的,甚至在从属配置上也没有设置空闲时间。
jenkins 作业完成 12 分钟后抛出错误消息。即使作业需要 4 小时,它也会成功执行作业并在最后抛出错误。
如果连接断开,则错误会在问题发生时出现,而不总是在作业完成后出现。
我应该检查什么 network/firewall 来解决这个问题?我们没有为从属连接设置任何特定端口。
tcpdump 非常大,持续时间较长,可以检查它何时真正下降。 有什么更好的方法来解决问题。
听起来您的 Jenkins 主服务器和从服务器之间有什么东西正在断开您的会话。那个或者你的奴隶在你的构建过程中没有反应。我让 Jenkins 构建长达 24 小时都没有问题,对构建的长度没有任何严格的限制。
如果我不得不猜测您在主从之间有一个 VPN 隧道或 NAT 网关,并且由于构建没有向主报告任何内容,因此没有任何内容被发送。 VPN 和 NAT 网关将定期结束在给定时间间隔内不发送任何数据的连接,以清除它们的连接表。 SSH 有一个内置的 keepalive 功能来解决这个问题。
在你的 build slave 上尝试 setting the following in /etc/ssh/ssh_config(假设你使用的是 openssh):
ServerAliveInterval 300
这将告诉您的从站每 5 分钟发送一个 no_op 数据包,以确保中间网络设备不会终止您的连接。
看起来不像Jenkins supports setting keepalive on the master side yet。