web-dev-qa-db-ja.com

Java JenkinsでのWeb Startを介したスレーブエージェントの起動の問題

私たちは最近、ジェンキンスを最新版にアップグレードしました。

そしてそれ以来、私はそれを起動しようとするたびにコマンドラインからJava WebStartを介してスレーブを起動することができませんでした "アプリケーションを起動できません"エラーが発生します

これで詳細パネルに

CouldNotLoadArgumentException[ Could not load file/URL specified: http://MyServer:8080/computer/Slave1/slave-agent.jnlp]
    at com.Sun.javaws.Main.launchApp(Unknown Source)
    at com.Sun.javaws.Main.continueInSecureThread(Unknown Source)
    at com.Sun.javaws.Main.access$000(Unknown Source)
    at com.Sun.javaws.Main$1.run(Unknown Source)
    at Java.lang.Thread.run(Unknown Source)

Jenkinsサイトを参照して、そこからランチしようとすると、IT WORKSが、ボックスを再起動すると、起動時のコマンドラインがジョブを実行できません。

これは、スレーブから実行しようとしているコマンドです

cd "C:\Program Files (x86)\Java\jre7\bin"
javaws http://MyServer:8080/computer/Slave1/slave-agent.jnlp

問題は、これが機能していたことです。また、Javaが運がなかったが、

アイデアはありますか?

17
AltF4_

おそらく、ジェンキンスフォーラムへの投稿が主な原因であるため、この新しい動作はセキュリティ問題の修正によるものです。 https://wiki.jenkins-ci.org/display/SECURITY/Jenkins+Security+アドバイザリ+ 2013-01-04

次の2つのソリューションが登場しているようです。

  1. JNLPファイルをダウンロードし(ブラウザー、wget、curlなどを使用)、ローカルで実行します-追加のパラメーターが必要になる場合があります。
  2. [Jenkinsの管理]-> [グローバルセキュリティの構成]に移動し、プロジェクトベースのマトリックス承認戦略で、ユーザー "匿名"の[スレーブ]セクションで[接続]を有効にします。これにより、誰かがスレーブをエミュレートする場所を攻撃する可能性があります(ただし、私の場合は、プライベートな仕事用ネットワーク上で-それは問題ではありません)。
16
Jason Swager

JNLPファイルをマスターに残し、匿名ユーザーがスレーブとして接続するためのセキュリティホールを開きたくない場合は、jenkins-slave.xmlファイルを編集して-jnlpCredentialsオプションと- jnlpUrlオプション:

-jnlpCredentials {user}:{apiKey}

どこ:
userはJenkinsのアカウントデータベースのユーザー名です
apiKeyはユーザーのAPIキーです(これはユーザーのパスワードではないことに注意してください)

ユーザーのAPIキーを取得するには、以下に進みます。

http://SERVER/user/USER/configure

ボタンをクリックして、そのユーザーのAPIキーを表示します。

9
metaforge

私にとっては、jenkinsマトリックスのアクセス許可に「匿名」接続が設定されていることを確認し、マスターから送信されたJNLPファイルをハッキングする必要がありました。

これは2.19.2のJenkinsのバグだと思います。基本的に、サーバーからプルダウンされたJNLPファイルでは、マスターのIPとポートを含むトンネリング引数は、スレーブのip-addrのみに置き換えられます。

Engine.Javaのコード[line#308]を参照してください。例外は次の場所からスローされます。

https://searchcode.com/codesearch/view/65603521/

例外は次のようになります。 enter image description here

元々、私のJNLPファイルは次のようになりました。

<jnlp codebase="http://jenkins-master-ip-addr:8080/computer/Node1/" spec="1.0+">
<information>
    <title>Agent for Node1</title>
    <vendor>Jenkins project</vendor>
    <homepage href="https://jenkins-ci.org/"/>
</information>
<security>
    <all-permissions/>
</security>
<resources>
    <j2se version="1.7+"/>
    <jar href="http://jenkins-master-ip-addr:8080/jnlpJars/remoting.jar"/>
    <property name="hudson.showWindowsServiceInstallLink" value="true"/>
</resources>
<application-desc main-class="hudson.remoting.jnlp.Main">

    <argument>b16fdf4388d98e4be6910218cfb5a9b5fa999bcd8dec90264e525171a3b02fce</argument>
    <argument>Node1</argument>

    <argument>-tunnel</argument>
    <argument>jenkins-slave-ip-addr</argument>

    <argument>-url</argument>
    <argument>http://jenkins-master-ip-addr:8080/</argument>

</application-desc>

問題は、上記の「-tunnel」引数です。 SLAVEマシンのip-addrのみが含まれます。これをマスターマシンのip-addおよびPORTに変更して、修正しました!未満:

    <argument>-tunnel</argument>
    <argument>jenkins-master-ip-addr:9080</argument>
1
Eric Manley

コマンドラインの名前Slave1とjenkinsノードの定義が同じかどうかを確認します。jenkinsノードのSlave1でもあります。

0
tjdoubts