Jenkins slave 在构建期间脱机

2022-09-04 21:08:11

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

我的配置:

Jenkins 版本 1.651.1,Zuul 版本 2.1.1.dev393,其中一个 Jenkins 主站(Ubuntu),2 个从站(Ubuntu)每个都有 16GB 的 RAM 并行运行构建。

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

当其中一个从站完成其构建时,我遇到了一个问题,然后两个从站中的java进程都被杀死了,所以另一个从属服务器脱机。

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

以前我有这个问题,这个问题通过从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 

答案 1

从站脱机,要么是因为

  1. 运行在其上的作业消耗的 RAM 多于剩余内存或没有内存的 RAM。

- 如果是这种情况,请尝试在从站中具有较少数量的执行器或在节点中具有更多的CPU / RAM。

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

-停止清理进程或终止正在消耗内存的孤立进程。

  1. SSH 密钥可能会在主站和从站之间更改。

- 需要再次通过scp将ssh密钥发送给从站,并且需要再次修饰。

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


答案 2

我在Linux上使用Jenkins奴隶连接时遇到了类似的困难。它们要么不启动,要么下降,而不是空转。

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

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

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

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

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

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

希望这个解决方案可能有助于摆脱问题中的一些松散。


推荐