web-dev-qa-db-ja.com

JenkinsスレーブがWindowsでのハンドシェイクに失敗する

CIマスターサーバーとしてwin2k8マシンを使用しています(Jenkins)

他にもさまざまなサーバーをスレーブとして実行しています

マスターはポート2000でスレーブ接続をリッスンしています

  • SlaveA --can 2000でマスターに接続します
  • SlaveB --is nable 2000でマスターに接続する
  • SlaveB anotherポートでマスターに接続できます
  • SlaveA-オープンポートとして使用できるのは2000のみです
  • SlaveB-ポート2000を何にも使用していないようで、netstatで示されているように使用を妨げるファイアウォールルールがありません。

SlaveAとSlaveBの動作は、いくつかの異なるマシンで共通しています。つまり接続しない3つの無関係なサーバー(異なるホスト、異なるネットワーク)と、接続できるいくつかのサーバーがあります。

接続に失敗したときのスレーブエージェントの出力は次のとおりです。

03-Oct-2011 15:07:22 hudson.remoting.jnlp.Main$CuiListener <init>
INFO: Hudson agent is running in headless mode.
03-Oct-2011 15:07:22 hudson.remoting.jnlp.Main$CuiListener status
INFO: Locating server among [http://myserver:8080/]
03-Oct-2011 15:07:22 hudson.remoting.jnlp.Main$CuiListener status
INFO: Connecting to myserver:2000
03-Oct-2011 15:07:22 hudson.remoting.jnlp.Main$CuiListener status
INFO: Handshaking
03-Oct-2011 15:08:23 hudson.remoting.jnlp.Main$CuiListener error
SEVERE: Connection reset
Java.net.SocketException: Connection reset
        at Java.net.SocketInputStream.read(Unknown Source)
        at Java.io.BufferedInputStream.fill(Unknown Source)
        at Java.io.BufferedInputStream.read(Unknown Source)
        at hudson.remoting.Engine.readLine(Engine.Java:279)
        at hudson.remoting.Engine.run(Engine.Java:211)

Telnetが機能するため、ネットワークの人々は無実を主張します

アプリは別のポートで動作するため、ソフトウェア側から多くの入力を得ることができません

このシナリオをデバッグするために次に何を試すべきか迷っています:(

どんな提案でも大歓迎です。

更新:マスターログにあるように、スレーブとマスター間の接続が確立されているようです。次の出力が表示されます。

INFO: Accepted connection #13 from /MY.SLAVE.IP.ADDRESS:58545
Oct 3, 2011 5:38:09 PM hudson.TcpSlaveAgentListener$ConnectionHandler run
WARNING: Connection #13 failed
Java.net.SocketException: Connection reset
    at Java.net.SocketInputStream.read(Unknown Source)
    at Java.net.SocketInputStream.read(Unknown Source)
    at Java.io.DataInputStream.readUnsignedShort(Unknown Source)
    at Java.io.DataInputStream.readUTF(Unknown Source)
    at Java.io.DataInputStream.readUTF(Unknown Source)
    at hudson.TcpSlaveAgentListener$ConnectionHandler.run(TcpSlaveAgentListener.Java:178)

ただし、接続がリセットされる理由がわからず、どこを見ればよいのかわかりません:(

5
DannyT

W2k8 jenkinsスレーブを自分で接続しようとしたときに、私はその正確なエラーにぶつかりました。

最終的にJenkinsスレーブがマスターに正常に接続する原因となったもののリストをまとめました。

1. Make sure that Java 1.8 is installed on the server.
2. Download Jenkins from:
https://jenkins.io/content/thank-you-downloading-windows-installer/#stable
and install it.
3. Make sure that the user windows user is a member of the local administrative account on the server.
4. Once Jenkins is installed, open services, find Jenkins service, right click and properties, click the “Log on” tab and make sure that “This account” is set with the windows user you chose, save and restart the service.
5. Open “Local security Policy” on the server, on the left panel, under “Security settins” -> “Local Policies” -> “User rights assignments” -> find policy: “Log on as a batch job”, open it and make sure that the local administrative group is added there.
6. Repeat the same steps for the policy “Log on as a service”.
7. Open “regedit”, find the following keys and repeat the steps on both of them:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\{72C24DD5-D70A-438B-8A42-98424B88AFB8}
HKEY_CLASSES_ROOT\CLSID\{76A64158-CB41-11D1-8B02-00600806D9B6}
a. Right click the key and choose permissions.
b. Click “Advanced”.
c. In the line of “Owner”, click “change”.
d. Click “Locations” and choose the first line (this computer).
Then, in the lower box write “Administrators” and click “Check Names”, then click ok and apply.
e. Double click the Administrators line and choose under Basic permissions “Full Control” and click ok and apply.
f. In the line of “Owner”, click “change”.
g. Click “Locations” and choose the first line (this computer).
Then, in the lower box write “NT Service\trusted” and click “Check Names”, then click ok and apply.
8. Restart the server.
9. When the server is back up, open the browser and browse to:
http://JENKINS_IP:8080 and log in.
10. Then on the left panel click Jenkins -> Manage server -> Manage nodes.
11. On the left panel, click “New Node”, name it and choose “Permanent agent”.
Then in the node settings:
12. Set # of executors.
13. Set Remote root directory c:\jenkins.
14. Set: 
a. a label as the name of server.
b. Launch method: choose “Let Jenkins controlthis Windows slave as a windows service”.
c. Use javab as the “Administrator” (set user and password).
d. Run service as: choose “Use administrator account given above”.
e. Click save.
15. Once the node appears in the list of nodes, click it and choose connect node and allow 3 minutes to make the connection, even if you get an error, ignore it and it will eventually connect to the node.
At this point the new node is ready to accept jobs.

これがお役に立てば幸いです。

2
Itai Ganot