【问题标题】:Jenkins slave went offline during buildJenkins slave 在构建期间离线
【发布时间】:2017-04-13 12:21:48
【问题描述】:

Jenkins slave 在构建期间离线。我该如何解决这个问题,我在 SO 和 Jenkins 问题中看到了很多相关问题,但没有人给出解决方案。

我的配置:

Jenkins 版本 1.651.1, Zuul 版本 2.1.1.dev393,带有一个 Jenkins master(Ubuntu), 2 个从属设备(Ubuntu)每个有 16GB 的 RAM 并行运行构建。

Jenkins master、devstack 和两个 nodepool 从属都在同一个 IP 范围内。

当其中一个从属设备完成构建然后两个从属设备中的 java 进程被杀死,因此另一个从属设备下线时,我遇到了一个问题。

我通过列出从服务器中运行的进程发现了这个问题,并观察到当一个从服务器完成构建而另一个从服务器仍在运行构建时,两个从服务器中的 java 进程同时被杀死。

以前我遇到过这个问题,通过从 Open JDK 切换到 Oracle 的 JDK 解决了这个问题。现在 slaves 正在使用 oracle java 1.8.0_111 但现在我们也遇到了与 Oracle-java8 相同的问题

构建日志:

01:42:07 Slave went offline during the build
01:42:07 ERROR: Connection was broken: java.io.IOException: Unexpected termination of the channel
01:42:07    at hudson.remoting.SynchronousCommandTransport$ReaderThread.run(SynchronousCommandTransport.java:50)
01:42:07 Caused by: java.io.EOFException
01:42:07    at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2351)
01:42:07    at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2820)
01:42:07    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:804)
01:42:07    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:302)
01:42:07    at hudson.remoting.ObjectInputStreamEx.<init>(ObjectInputStreamEx.java:48)
01:42:07    at hudson.remoting.AbstractSynchronousByteArrayCommandTransport.read(    AbstractSynchronousByteArrayCommandTransport.java:34)
01:42:07    at hudson.remoting.SynchronousCommandTransport$ReaderThread.run(SynchronousCommandTransport.java:48)
01:42:07 
01:42:07 Build step 'Execute shell' marked build as failure 

【问题讨论】:

  • 您查看系统消息日志了吗?尝试查看this issue and workaround 是否与您的案例相关。
  • 我们经常在主人很忙的时候看到这个。然后我们为它分配更多的“CPU”。在那之后(到目前为止2个月)没有看到它。
  • 你是如何运行master的?码头工人?主节点的资源分配是多少?

标签: java jenkins build openstack


【解决方案1】:

奴隶下线了,要么是因为

  1. 在其上运行的作业消耗的 RAM 比它拥有的多 或没有记忆。

-如果是这种情况,请尝试在从属中使用更少的执行器或在节点中使用更多的 CPU/RAM。

  1. 从属清理进程可能正在运行,或者某些孤立进程可能正在后台运行,从而导致连接中断。

-停止清理进程或杀死正在消耗内存的孤儿进程。

  1. SSH 密钥可能在主从之间发生变化。

-需要再次通过scp将ssh密钥发送给slave,需要再次修改。

请尝试一次,并阅读以下文章以获得更多帮助。

【讨论】:

  • 我尝试了所有这些选项,没有任何帮助.. 其他一些事情导致了我的问题...
  • 谢谢!添加更多 CPU 和 RAM (VM) 后,我的问题 #1 就解决了
【解决方案2】:

我在 Linux 上使用 Jenkins 从属连接时遇到了类似的困难。它们要么不启动,要么停止,而不是空转。

我发现问题出在 Linux shell 以及它处理远程连接的方式上。

经过一番努力,我的解决方案是:

  • 在主从机器上为 Jenkins 创建一个单独的用户。
  • 为这些 Jenkins 用户删除 (rm) ~/.bashrc 文件
  • 弹回服务器,完成。

bashrc 文件(甚至是空文件)的存在破坏了集群。这是使奴隶在我们的环境中联合的唯一解决方案。文档没有涵盖这一点。

你可以想象“付出很大的努力”基本上是用不同的 bashrc 文件组合来弹跳整个集群,直到最后只是沮丧地删除它们。

环境是与 IBM ClearCase 集成的 Centos 和 Jenkins CI。

希望这个解决方案可能有助于解决您的问题。

【讨论】:

    【解决方案3】:

    我通过在路由器的配置中为我的构建节点指向一个静态 IP 来解决此问题,可能是因为路由器下的设备太多并且 IP 被不规则地占用。

    【讨论】:

      【解决方案4】:

      我也遇到了和你一样的问题,最后发现是节能器的配置。当我勾选了“防止计算机在显示器关闭时自动休眠”和取消勾选“尽可能让硬盘休眠”时,问题已解决,供您参考。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        • 2018-02-22
        • 2017-08-06
        相关资源
        最近更新 更多