簡體   English   中英

Jenkins slave 在構建過程中離線

[英]Jenkins slave went offline during build

Jenkins slave 在構建過程中離線。 我該如何解決這個問題,我在 SO 和 Jenkins 問題中看到了很多相關問題,但沒有人給出解決方案。

我的配置:

Jenkins 版本 1.651.1,Zuul 版本 2.1.1.dev393 帶有一個 Jenkins 主站(Ubuntu),2 個從站(Ubuntu)每個都有 16GB 的 RAM 並行運行構建。

Jenkins master、devstack 和兩個 nodepool slave 都在相同的 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. 運行在它上面的作業消耗的 RAM 比它有或沒有剩余內存要多。

- 如果是這種情況,請嘗試在從站中使用較少數量的執行程序或在節點中使用更多 CPU/RAM。

  1. 從屬清理進程可能正在運行,或者某些孤立進程可能正在 back 運行,這會導致連接中斷。

- 停止清理進程或殺死正在消耗內存的孤兒進程。

  1. SSH 密鑰可能會在 master 和 slave 之間更改。

-需要再次通過scp發送ssh密鑰給slave,需要再次修改。

請嘗試一次並閱讀以下文章以獲得更多幫助。

我在 Linux 上使用 Jenkins slave 連接也遇到了類似的困難。 它們要么不會啟動,要么會下降,而不是空轉。

我發現問題出在 Linux shell 及其處理遠程連接的方式上。

經過一番努力,我的解決方案是:

  • 在 master 和 slave 機器上為 Jenkins 創建一個單獨的用戶。
  • 刪除(rm)這些 Jenkins 用戶的 ~/.bashrc 文件
  • 彈跳服務器,完成。

bashrc 文件(甚至是空文件)的存在破壞了集群。 這是使奴隸在我們的環境中聯合的唯一解決方案。 文檔沒有涵蓋這一點。

你可以想象“很多努力”基本上是用不同的 bashrc 文件組合來彈跳整個集群,直到最終沮喪地將它們全部刪除。

環境是 Centos 和 Jenkins CI 與 IBM ClearCase 集成。

希望這個解決方案可以幫助解決您的問題。

我通過在我的構建節點的路由器配置中指向一個靜態 IP 來解決這個問題,可能是因為路由器下的設備太多並且 IP 被不規則地占用。

遇到了和你一樣的問題,最后發現是節能器的配置問題不見了,供您參考。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM