web-dev-qa-db-fra.com

Problèmes de lancement de l'agent esclave via Java Web Start on Jenkins

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?

17
AltF4_

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:

  1. Téléchargez le fichier JNLP (via navigateur, wget, curl, peu importe) puis exécutez localement - peut nécessiter des paramètres supplémentaires.
  2. Allez dans Gérer Jenkins -> Configurer la sécurité globale, et sous Stratégie d'autorisation de matrice basée sur le projet, activez "se connecter" dans la section "esclave", pour l'utilisateur "Anonyme". Cela vous laisserait ouvert aux attaques où quelqu'un émule un esclave (mais dans mon cas, sur un réseau de travail privé - ce n'est pas un problème.)
16
Jason Swager

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.

9
metaforge

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'exception ressemble à: enter image description here

À 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>
1
Eric Manley

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.

0
tjdoubts