1

ジェンキンスのバージョン: 1.643.2

Docker プラグインのバージョン: 0.16.0

私の Jenkins 環境には、2 ~ 5 個のスレーブ ノード サーバー (slave1、slave2、slave3) を持つ Jenkins マスターがあります。

これらの各スレーブは、Docker プラグインを使用して Jenkins グローバル構成で構成されます。

この時点ですべてが機能しています。

監視システムがスレーブ 3 で SWAP スペースの使用率が高い (例: IP: 11.22.33.44) というアラートをスローしているのを見たので、そのマシンに ssh して実行しました:sudo docker psこのスレーブ 3 で現在実行中の Docker コンテナーの有効な出力が得られました。機械。

ターゲット スレーブのマシン (4 つのコンテナーが実行ps -eo pmem,pcpu,vsize,pid,cmd | sort -k 1 -nr | head -10されている場所) で実行することにより、すべての RAM を消費している上位 5 つのプロセスがjava -jar slave.jar各コンテナー内で実行されていることがわかりました。だから、たわごとを再開して、記憶を取り戻してみませんか?次の出力では、ステップsudo docker ps前後のコマンドの状態を確認できます。docker restart <container_instance>右にスクロールすると、 で終わるコンテナー ID の 2 行目で、ホスト (slave3) マシン...0a02の仮想ポート (見出しNAMESの下にリストされている) が 1053 であることがわかります (これは、コンテナーの仮想 IP のポート 22 に SSH 用にマップされていました)。かっこいい、これが意味するのは、ジェンキンスからManage Nodeセクションでは、スレーブのコンテナーを再起動しようとすると、Jenkins は HOST IP の 11.22.33.44:1053 に接続しようとし、スレーブを正常に起動するために想定されていることをすべて実行します。つまり、Jenkins はその PORT (1053) をどこかに保持しています。

CONTAINER ID        IMAGE                                                   COMMAND                  CREATED             STATUS              PORTS                  NAMES
ae3eb02a278d        docker.someinstance.coolcompany.com:443/jenkins-slave-stable-image:1.1   "bash -c '/usr/sbin/s"   26 hours ago        Up 26 hours         0.0.0.0:1048->22/tcp   lonely_lalande
d4745b720a02        docker.someinstance.coolcompany.com:443/jenkins-slave-stable-image:1.1   "bash -c '/usr/sbin/s"   9 days ago          Up About an hour    0.0.0.0:1053->22/tcp   cocky_yonath
bd9e451265a6        docker.someinstance.coolcompany.com:443/jenkins-slave-stable-image:1.1   "bash -c '/usr/sbin/s"   9 days ago          Up About an hour    0.0.0.0:1050->22/tcp   stoic_bell
0e905a6c3851        docker.someinstance.coolcompany.com:443/jenkins-slave-stable-image:1.1   "bash -c '/usr/sbin/s"   9 days ago          Up About an hour    0.0.0.0:1051->22/tcp   serene_tesla

sudo docker restart d4745b720a02; echo $?
d4745b720a02
0

CONTAINER ID        IMAGE                                                   COMMAND                  CREATED             STATUS              PORTS                  NAMES
ae3eb02a278d        docker.someinstance.coolcompany.com:443/jenkins-slave-stable-image:1.1   "bash -c '/usr/sbin/s"   26 hours ago        Up 26 hours         0.0.0.0:1048->22/tcp   lonely_lalande
d4745b720a02        docker.someinstance.coolcompany.com:443/jenkins-slave-stable-image:1.1   "bash -c '/usr/sbin/s"   9 days ago          Up 4 seconds        0.0.0.0:1054->22/tcp   cocky_yonath
bd9e451265a6        docker.someinstance.coolcompany.com:443/jenkins-slave-stable-image:1.1   "bash -c '/usr/sbin/s"   9 days ago          Up About an hour    0.0.0.0:1050->22/tcp   stoic_bell
0e905a6c3851        docker.someinstance.coolcompany.com:443/jenkins-slave-stable-image:1.1   "bash -c '/usr/sbin/s"   9 days ago          Up About an hour    0.0.0.0:1051->22/tcp   serene_tesla

sudo docker restart <instanceIDofContainer>を実行した後、free -hRAM grep -i swap /proc/meminfo(以前は完全に使用され、残りの230MBの空き容量しか表示されていなかった)が1GBの空き容量であり、合計1GであったSWAPサイズが1G使用されました(swappiness 60または10の両方を試しました)が450MBになりました。空き領域をスワップします。そのため、アラートは解決されました。涼しい。

しかし、sudo docker ps上記の出力からわかるように、再起動ステップの後、そのコンテナー ID...0a02に対して、新しい PORT# 1054 を取得しました!!

[ノードの管理] > [このノードをオフラインにして停止し、再起動しようとした] に移動したとき、Jenkins は新しいポート (1054) を取得していません。どういうわけか古いポート 1053 を選択しています (ポート 1053 (コンテナーの仮想 IP のポート # 22 (ssh) にマップされている) で 11.22.33.44 (ホストの IP) への SSH 接続を試みている間)。

Jenkins が新しいポートを認識し、正常に再起動できるように、このスレーブ コンテナの Jenkins でこのポートまたは構成を変更するにはどうすればよいですか?

PS:ノードの[構成] をクリックしてその構成を確認しても、名前フィールド以外は何も表示されません。通常、通常のスレーブには多くのフィールドがあります (ラベル、ルート ディレクトリ、起動方法、プロパティ env 変数、スレーブ環境用のツールを定義できますが、これらの Docker コンテナーについては、単に名前フィールド)。Jenkins グローバル構成 ( Dockerプラグインのセクションの下) で[テスト接続] をクリックすると、Docker バージョン 1.8.3 が正常に検出されていることが示されます。

現在、1053 ポート (telnet) が機能していないため、このコンテナーのインスタンス ID が 1054 になったため (再起動ステップ後)、SSH 接続ステップ中に Jenkins の再起動ステップが失敗します (SSH メソッドを介して接続するために最初に行うこと)。

ここに画像の説明を入力

[07/27/17 17:17:19] [SSH] Opening SSH connection to 11.22.33.44:1053.
Connection timed out
ERROR: Unexpected error in launching a slave. This is probably a bug in Jenkins.
java.lang.IllegalStateException: Connection is not established!
    at com.trilead.ssh2.Connection.getRemainingAuthMethods(Connection.java:1030)
    at com.cloudbees.jenkins.plugins.sshcredentials.impl.TrileadSSHPasswordAuthenticator.canAuthenticate(TrileadSSHPasswordAuthenticator.java:82)
    at com.cloudbees.jenkins.plugins.sshcredentials.SSHAuthenticator.newInstance(SSHAuthenticator.java:207)
    at com.cloudbees.jenkins.plugins.sshcredentials.SSHAuthenticator.newInstance(SSHAuthenticator.java:169)
    at hudson.plugins.sshslaves.SSHLauncher.openConnection(SSHLauncher.java:1212)
    at hudson.plugins.sshslaves.SSHLauncher$2.call(SSHLauncher.java:711)
    at hudson.plugins.sshslaves.SSHLauncher$2.call(SSHLauncher.java:706)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
[07/27/17 17:19:26] Launch failed - cleaning up connection
[07/27/17 17:19:26] [SSH] Connection closed.
4

1 に答える 1