web-dev-qa-db-ja.com

Jenkinsスレーブがビルド中にオフラインになりました

ビルド中にJenkinsスレーブがオフラインになります。どうすればこれを修正できますか?SOとJenkinsの問題で多くの関連する質問を見ましたが、誰も解決策を提供しませんでした。

私の構成:

Jenkinsバージョン1.651.1、Zuulバージョン2.1.1.dev393、1つのJenkinsマスター(Ubuntu)、2つのスレーブ(Ubuntu)には、それぞれ16GBのRAMビルドを並行して実行しています。

Jenkinsマスター、devstack、および両方のノードプールスレーブは同じIP範囲にあります。

スレーブの1つがビルドを完了すると、両方のスレーブのJavaプロセスが強制終了され、もう1つのスレーブがオフラインになるという問題が発生します。

スレーブで実行されているプロセスを一覧表示することでこの問題を発見し、一方のスレーブがビルドを完了し、もう一方のスレーブがまだ実行しているときに、両方のスレーブでJavaプロセスが同時に強制終了されることを確認しました。ビルドします。

以前、この問題が発生しましたが、OpenJDKから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 
12
RMK

スレーブはオフラインになります。

  1. その上で実行されているジョブは、メモリが残っているかない場合よりも多くのRAMを消費しています。

-この場合は、スレーブのエグゼキュータの数を減らすか、ノードのCPU/RAMを増やすようにしてください。

  1. スレーブクリーンアッププロセスが実行されているか、一部の孤立プロセスがバックで実行されている可能性があります。これにより、接続が切断されます。

-クリーンアッププロセスを停止するか、メモリを消費している孤立プロセスを強制終了します。

  1. SSHキーがマスターとスレーブ間で変更される可能性があります。

-sshキーをscp経由でスレーブに再度送信する必要があり、もう一度修正する必要があります。

一度試してみて、さらにヘルプが必要な場合は以下の記事も読んでください。

6
dildeepak

LinuxでのJenkinsスレーブ接続でも同様の問題が発生しました。アイドリングの代わりに、開始もドロップもしません。

問題はLinuxシェルとそれがリモート接続を処理する方法にあることを発見しました。

多くの努力の後、私の解決策は次のとおりでした。

  • マスターマシンとスレーブマシンでJenkins用に個別のユーザーを作成します。
  • これらのJenkinsユーザーの〜/ .bashrcファイルを削除(rm)します
  • サーバーをバウンスします。

Bashrcファイル(空のファイルでも)の存在により、クラスターが破損しました。それが私たちの環境で奴隷を連合させる唯一の解決策でした。ドキュメントはこれをカバーしていませんでした。

「多大な労力」は基本的に、bashrcファイルのさまざまな組み合わせでクラスター全体をバウンスさせ、最終的にすべてをフラストレーションで削除することでした。

環境は、IBMClearCaseと統合されたCentosおよびJenkinsCIでした。

うまくいけば、この解決策はあなたの問題で何かをゆるめるのに役立つかもしれません。

1