Nous avons récemment mis à niveau Jenkins vers la dernière version.
et depuis lors je n'ai pas pu lancer les esclaves via Java WebStart via la ligne de commande à chaque fois que j'essaye de le lancer j'obtiens l'erreur "Impossible de lancer l'application"
avec cela dans le panneau de détails
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)
Lorsque vous essayez de naviguer sur le site Jenkins et de le déjeuner à partir de là, cela fonctionne, cependant si vous redémarrez la boîte, la ligne de commande au démarrage ne fait pas le travail.
Ceci est la commande que j'essaie d'exécuter à partir de l'esclave
cd "C:\Program Files (x86)\Java\jre7\bin"
javaws http://MyServer:8080/computer/Slave1/slave-agent.jnlp
Le problème est que cela fonctionnait auparavant. J'ai également essayé de mettre à jour la dernière version de Java mais pas de chance,
Une idée, quelqu'un?
Soi-disant, en raison principalement de messages sur les forums Jenkins, ce nouveau comportement est dû à un correctif pour un problème de sécurité: https://wiki.jenkins-ci.org/display/SECURITY/Jenkins+Security+ Avis + 04/01/201
Deux solutions semblent se présenter:
Si vous souhaitez laisser le fichier JNLP sur le maître et que vous ne souhaitez pas ouvrir le trou de sécurité pour que les utilisateurs anonymes se connectent en tant qu'esclaves, modifiez le fichier jenkins-slave.xml pour ajouter l'option -jnlpCredentials avec le - Option jnlpUrl:
-jnlpCredentials {user}:{apiKey}
où:
utilisateur est le nom d'utilisateur dans la base de données des comptes de Jenkins
apiKey est la clé API de l'utilisateur (notez qu'il ne s'agit PAS du mot de passe de l'utilisateur)
Pour obtenir la clé API pour l'utilisateur, accédez à:
http://SERVER/user/USER/configure
et cliquez sur le bouton pour afficher la clé API de cet utilisateur.
Pour moi, je devais m'assurer d'avoir le jeu de connexion "anonyme" dans les autorisations de la matrice jenkins ET j'ai dû pirater le fichier JNLP qui est envoyé par le maître.
Je dirais que c'est un bug dans Jenkins en 2.19.2. Fondamentalement, dans le fichier JNLP extrait du serveur, l'argument de tunneling qui contient l'adresse IP et le port du maître est remplacé par l'ip-addr esclave uniquement.
Voir le code du moteur.Java, [ligne # 308], d'où provient l'exception:
https://searchcode.com/codesearch/view/65603521/
À l'origine, mon fichier JNLP ressemblait à:
<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>
Le problème est l'argument "-tunnel" ci-dessus. Il contient uniquement l'ip-addr de la machine SLAVE. CHANGER ceci à l'ip-add ET PORT de la machine MASTER, corrigé! Au dessous de:
<argument>-tunnel</argument>
<argument>jenkins-master-ip-addr:9080</argument>
Vérifiez si le nom Slave1 dans la ligne de commande et la définition du nœud jenkins sont les mêmes. Il doit également s'agir de Slave1 dans le nœud jenkins.