私たちは最近、ジェンキンスを最新版にアップグレードしました。
そしてそれ以来、私はそれを起動しようとするたびにコマンドラインから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が運がなかったが、
アイデアはありますか?
おそらく、ジェンキンスフォーラムへの投稿が主な原因であるため、この新しい動作はセキュリティ問題の修正によるものです。 https://wiki.jenkins-ci.org/display/SECURITY/Jenkins+Security+アドバイザリ+ 2013-01-04
次の2つのソリューションが登場しているようです。
JNLPファイルをマスターに残し、匿名ユーザーがスレーブとして接続するためのセキュリティホールを開きたくない場合は、jenkins-slave.xmlファイルを編集して-jnlpCredentialsオプションと- jnlpUrlオプション:
-jnlpCredentials {user}:{apiKey}
どこ:
userはJenkinsのアカウントデータベースのユーザー名です
apiKeyはユーザーのAPIキーです(これはユーザーのパスワードではないことに注意してください)
ユーザーのAPIキーを取得するには、以下に進みます。
http://SERVER/user/USER/configure
ボタンをクリックして、そのユーザーのAPIキーを表示します。
私にとっては、jenkinsマトリックスのアクセス許可に「匿名」接続が設定されていることを確認し、マスターから送信されたJNLPファイルをハッキングする必要がありました。
これは2.19.2のJenkinsのバグだと思います。基本的に、サーバーからプルダウンされたJNLPファイルでは、マスターのIPとポートを含むトンネリング引数は、スレーブのip-addrのみに置き換えられます。
Engine.Javaのコード[line#308]を参照してください。例外は次の場所からスローされます。
https://searchcode.com/codesearch/view/65603521/
元々、私の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>
コマンドラインの名前Slave1とjenkinsノードの定義が同じかどうかを確認します。jenkinsノードのSlave1でもあります。