Jenkins slave在构建期间脱机

时间:2016-11-29 13:21:52

标签: java jenkins build openstack

Jenkins奴隶在构建期间脱机。我怎么能解决这个问题,我在SO和Jenkins问题上看到了很多相关问题,但没有人给出解决方案。

我的配置:

詹金斯版本1.651.1, Zuul版本2.1.1.dev393与一个Jenkins大师(Ubuntu), 2个从站(Ubuntu)每个都有16GB的RAM 并行运行构建。

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

我遇到一个问题,当其中一个奴隶完成其构建时,两个奴隶中的java进程都被杀死,因此另一个奴隶离线。

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

以前我遇到过这个问题,通过从Open JDK切换到Oracle的JDK解决了这个问题。现在奴隶正在使用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 

4 个答案:

答案 0 :(得分:6)

奴隶离线,因为

  1. 在其上运行的作业消耗的RAM比现在多 或者没有记忆。
  2. - 如果是这种情况,请尝试在从站中使用更少数量的执行程序,或在节点中拥有更多CPU / RAM。

    1. Slave cleanup进程可能正在运行,或者某些孤立进程可能正在运行,导致连接中断。
    2. - 停止清理过程或杀死消耗内存的孤儿进程。

      1. 主密钥和从属密钥之间的SSH密钥可能已更改。
      2. - 需要再次通过scp将ssh密钥发送给奴隶,并需要再次修改。

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

答案 1 :(得分:1)

我在Linux上与Jenkins奴隶连接有类似的困难。他们不会开始或放弃而不是空转。

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

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

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

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

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

Centos和Jenkins CI与IBM ClearCase集成。

希望这个解决方案可能会帮助您解决问题。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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