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

nous avons récemment amélioré Jenkins à la dernière version.

et depuis je n'ai pas été en mesure de lancer les esclaves via Java WebStart à travers la ligne de commande à chaque fois que j'essaie de le lancer j'obtiens "impossible de lancer l'application" erreur

avec ceci 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.access0(Unknown Source)
    at com.sun.javaws.Main.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

lorsque vous essayez de naviguer sur le site de Jenkins et de déjeuner à partir de là, il fonctionne cependant si vous redémarrez ensuite la boîte, puis la ligne de commande sur le démarrage ne parvient pas à faire le emploi.

C'est la commande que j'essaie de lancer à partir de l'esclave

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

le problème est que cela fonctionnait. J'ai aussi essayé de mettre à jour vers la dernière version de Java mais pas de chance,

une Idée quelqu'un?

16
demandé sur AltF4_ 2013-01-11 15:44:28

4 réponses

censément, dû en grande partie à des messages sur les forums de Jenkins, ce nouveau comportement est dû à un correctif pour un problème de sécurité: https://wiki.jenkins-ci.org/display/SECURITY/Jenkins+Security+Advisory+2013-01-04

deux solutions semblent venir:

  1. télécharger le fichier JNLP (via navigateur, wget, curl, n'importe quoi) puis exécuter localement - peut nécessiter des paramètres supplémentaires.
  2. aller à gérer Jenkins -> configurer la sécurité globale, et sous Stratégie D'autorisation matricielle basée sur le projet, activez "connect" dans la section "slave", pour l'utilisateur "Anonymous". Cela vous laisserait ouvert à l'attaque là 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
répondu Jason Swager 2013-01-11 14:44:13

si vous voulez laisser le fichier JNLP sur le maître, et que vous ne voulez pas ouvrir le trou de sécurité pour que les utilisateurs anonymes se connectent en tant qu'esclave, éditez l'esclave jenkins.fichier xml pour ajouter l'option-jnlpCredentials avec l'option-jnlpUrl:

-jnlpCredentials {user}:{apiKey}

où:

l'utilisateur est le nom d'utilisateur dans la base de données de comptes de Jenkins

apiKey est la clé API de l'utilisateur (notez que ce n'est pas le mot de passe de l'utilisateur)

Pour obtenir la clé API pour l'utilisateur, allez dans:

http://SERVER/user/USER/configure

et cliquez sur le bouton pour afficher la clé API de l'utilisateur.

9
répondu metaforge 2014-04-29 20:29:02

pour moi, je devais m'assurer que j'avais la connexion "anonyme" définie dans les permissions matrix de jenkins et j'ai dû pirater le fichier JNLP qui est envoyé depuis master.

je dirais que c'est bug dans Jenkins en 2.19.2. Fondamentalement, dans le fichier JNLP qui est retiré du serveur, l'argument tunneling qui contient l'ip et le port du maître est remplacé par l'adresse ip-addr esclave seulement.

Voir le code pour le moteur.java, [ligne # 308] où l'exception est générée à partir de:

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

L'Exception ressemble à: enter image description here

a 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 le "tunnel" arg ci-dessus. Il ne contient que l'adresse ip de la machine esclave. En changeant cela à l'ip de la machine principale-ajouter et le PORT, corrigé! Ci-dessous:

    <argument>-tunnel</argument>
    <argument>jenkins-master-ip-addr:9080</argument>
1
répondu Eric Manley 2017-08-25 13:47:54

vérifiez si le nom Slave1 dans la définition de la ligne de commande et du nœud jenkins est le même.Il devrait être Slave1 dans Jenkins node aussi

0
répondu TVSuser1654136 2015-09-23 12:11:43