【问题标题】:jenkins-cli build trigger connection times out for long running jobsjenkins-cli 为长时间运行的作业构建触发器连接超时
【发布时间】:2018-08-03 23:06:23
【问题描述】:

我使用 udeploy Shell 步骤中的 followig 命令来调用 Jenkins 作业。我需要等待作业完成,然后继续 udeploy 中的进一步步骤。

无论我是直接从服务器上的外壳程序还是从 Udeploy 中的外壳程序步骤调用 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 小时,它也会成功执行作业并在最后抛出错误。

如果连接中断,则错误会在问题发生时出现,而不是总是在作业完成后出现。

我应该在网络/防火墙中检查什么来解决这个问题?我们没有为从连接设置任何特定端口。

tcpdump 非常大,需要更长的时间来检查它何时下降。 有什么更好的解决问题的方法。

【问题讨论】:

    标签: connection-timeout jenkins-cli


    【解决方案1】:

    听起来您的 Jenkins 主服务器和从服务器之间有什么东西正在断开您的会话。无论是那个还是你的奴隶在你的构建过程中都没有反应。我已经让 Jenkins 构建长达 24 小时没有问题,构建的长度没有任何严格的限制。

    如果我不得不猜测您的主服务器和从服务器之间有一个 VPN 隧道或 NAT 网关,并且由于构建没有向主服务器报告任何内容,因此不会发送任何内容。 VPN 和 NAT 网关通常会终止在给定时间间隔内不发送任何数据的连接,以清除它们的连接表。 SSH 内置了一个 keepalive 功能来解决这个问题。

    在您的 build slave 上尝试 /etc/ssh/ssh_config 中的 setting the following(假设您使用的是 openssh):

    ServerAliveInterval 300
    

    这将告诉您的从设备每 5 分钟发送一个 no_op 数据包,以确保中间网络设备不会终止您与您的连接。

    看起来不像Jenkins supports setting keepalive on the master side yet

    【讨论】:

    • 谢谢,我会测试一下,让你知道
    • 此设置有帮助。感谢您的支持。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多