Nœuds maître-esclaves
Présentation
Cette page a pour objet de traiter des sujets relatifs aux nœuds maître-esclaves dans Jenkins.
Description
Pour avoir plus d'informations sur les possibilités qu'apporte l'utilisation de nœuds maître-esclave, se rendre sur la page https://wiki.jenkins.io/display/JENKINS/Distributed+builds.
Configuration d'un esclave Windows
Cette partie s'appuie sur la section "Lancer un agent via JNLP dans un navigateur depuis la machine esclave vers le maître" de la documentation officielle.
Configuration JNLP
Le prérequis à la création d'un agent Windows avec interaction graphique est l'activation de JNLP.
Pour ce faire, aller dans "Administrer Jenkins" (/manage
), puis dans "Configurer la sécurité globale" (/configureSecurity
) et se rendre à la section "Agents" :
Sélectionner "Au hasard" et cliquer sur "Enregistrer" :
Création de l'esclave
Se rendre dans "Administrer Jenkins" (/manage
), puis dans "Gérer dans les nœuds" (/computer
) :
Cliquer sur "Créer un nœud" (/computer/new
) :
Si ce nœud est le premier, seule l'option "Permanent Agent" est disponible. La sélectionner, renseigner un nom de nœud puis cliquer sur "OK".
NB : un nœud peut être le serveur Jenkins maître ou un esclave/agent. Il n'y a pas de différence entre "Permanent Agent" et "Slave". La raison de ce changement de dénomination se trouve ici : https://issues.jenkins-ci.org/browse/JENKINS-27268.
Les détails du nœud s'affichent alors :
Renseigner les informations comme ceci :
- Nom
- Défini lors de l'écran précédent
- Répertoire de travail du système distant
- C:\jenkins
- Utilisation
- Réserver cette machine pour les jobs qui lui sont attachés seulement
- Méthode de lancement
- Launch agent by connecting it to the master
Cliquer sur "Enregistrer". Le nouveau nœud apparaît alors déconnecté :
Activation de l'esclave
Selon la version de Java installée, il se peut que le Java Web Start ne soit pas pris en charge.
Se rendre sur la machine Windows esclave et ouvrir un navigateur pour lancer Jenkins.
Sur la page principale, cliquer sur l'esclave précédemment créé :
Avec Java Web Start
Cliquer sur le bouton "Launch" pour lancer l'installation de l'agent Jenkins sur la machine Windows (il faut que Java soit installé pour installer l'agent) :
Si un message d'avertissement s'affiche, cliquer sur "Exécuter" pour lancer l'exécution de l'installateur :
Une fois l'agent installé et connecté, une petite fenêtre s'affiche en indiquant le message "Connected" :
Cliquer sur "File", puis sur "Install as a service" afin que l'agent soit installé comme un service Windows :
Un message s'affiche informant de l'utilité d'installer l'agent en tant que service Windows, entre autres :
- En cas d'erreur :
- Le message d'erreur suivant s'affiche si les droits d'administrateur de l'utilisateur ne sont pas suffisant :
- Rechercher alors l'exécutable "javaws.exe" (exemple : dans
C:\Program Files\Java\jre1.8.0_251\bin
), faire un clic-droit dessus et envoyer un raccourci vers le bureau :
- Faire un clic-droit sur le raccourci précédemment créé et éditer le champ "Cible" de l'onglet "Raccourci" en ajoutant la localisation du fichier "slave-agent.jnlp" précédemment téléchargé :
- Faire de nouveau un clic-droit sur le raccourci et choisir "Exécuter en tant qu'administrateur" :
- En l'absence d'erreur
- Si la fenêtre se ferme sans erreur, cela signifie que l'installation du service s'est faite correctement
Sans Java Web Start
Téléchargement de l'agent
Depuis la page Jenkins de l'esclave, cliquer sur agent.jar pour le télécharger, et l'enregistrer dans le Répertoire de travail du système distant défini lors la création de l'esclave (exemple : C:\jenkins
).
Test de la commande
Copier la commande fournie sur la page Jenkins de l'esclave, l'adapter si besoin, puis ouvrir une invite de commandes en tant qu'administrateur pour la coller et la lancer :
"C:\Program Files\Java\jre1.8.0_60\bin\java.exe" -jar C:\jenkins\agent.jar -jnlpUrl http://myserver/computer/selenium/slave-agent.jnlp -secret 2vg4pt44j875m6syy5h9e27lxihej6mwe8swzzay5i7ba9e15xzaj4tx5wq4nla9 -workDir "C:\jenkins"
Exemple de retour :
C:\Users\Administrateur>java -jar C:\jenkins\agent.jar -jnlpUrl http://myserver/computer/selenium/slave-agent.jnlp -secret 2vg4pt44j875m6syy5h9e27lxihej6mwe8swzzay5i7ba9e15xzaj4tx5wq4nla9 -workDir "C:\jenkins" juin 02, 2020 12:10:08 PM org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir INFOS: Using C:\jenkins\remoting as a remoting work directory juin 02, 2020 12:10:08 PM org.jenkinsci.remoting.engine.WorkDirManager setupLogging INFOS: Both error and output logs will be printed to C:\jenkins\remoting juin 02, 2020 12:10:09 PM hudson.remoting.jnlp.Main createEngine INFOS: Setting up agent: selenium juin 02, 2020 12:10:09 PM hudson.remoting.jnlp.Main$CuiListener <init> INFOS: Jenkins agent is running in headless mode. juin 02, 2020 12:10:09 PM hudson.remoting.Engine startEngine INFOS: Using Remoting version: 3.33 juin 02, 2020 12:10:09 PM org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir INFOS: Using C:\jenkins\remoting as a remoting work directory juin 02, 2020 12:10:09 PM hudson.remoting.jnlp.Main$CuiListener status INFOS: Locating server among [1] juin 02, 2020 12:10:09 PM org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver resolve INFOS: Remoting server accepts the following protocols: [JNLP4-connect, Ping] juin 02, 2020 12:10:09 PM hudson.remoting.jnlp.Main$CuiListener status INFOS: Agent discovery successful Agent address: myserver Agent port: 54066 Identity: 4a:3f:9a:12:e6:86:5f:6b:11:2f:5d:d1:67:ea:33:4a juin 02, 2020 12:10:09 PM hudson.remoting.jnlp.Main$CuiListener status INFOS: Handshaking juin 02, 2020 12:10:09 PM hudson.remoting.jnlp.Main$CuiListener status INFOS: Connecting to myserver:54066 juin 02, 2020 12:10:09 PM hudson.remoting.jnlp.Main$CuiListener status INFOS: Trying protocol: JNLP4-connect juin 02, 2020 12:10:09 PM hudson.remoting.jnlp.Main$CuiListener status INFOS: Remote identity confirmed: 4a:3f:9a:12:e6:86:5f:6b:11:2f:5d:d1:67:ea:33:4a juin 02, 2020 12:10:10 PM hudson.remoting.jnlp.Main$CuiListener status INFOS: Connected
Cela aura pour effet de créer un dossier C:\jenkins\remoting
.
Le lancement de cette commande permet de vérifier le bon fonctionnement de cette dernière et la bonne communication avec le serveur maître Jenkins.
En rafraîchissant la page Jenkins de l'esclave, un message "Agent is connected" est synonyme de bon fonctionnement.
Fermer la fenêtre de l'invite de commandes pour arrêter l'agent.
Création du service
La méthode d'installation du service avec le Java Web Start fournit automatiquement un wrapper qui permet de configurer facilement un service sous Windows. Cela se fait grâce au module d'installation d'agent Windows de Jenkins. Ce module s'appuie donc sur le "Windows Service Wrapper" qu'il va falloir télécharger manuellement.
Se rendre donc sur la page des releases de WinSW et télécharger le fichier "WinSW.NET4.exe" de la dernière version disponible.
Déposer ce fichier dans le dossier C:\jenkins
et le renommer avec l'ID de service souhaité (exemple : jenkins-slave.exe).
Toujours dans le dossier C:\jenkins
, créer un fichier XML nommé avec le même ID de service souhaité (exemple : jenkins-slave.xml) :
<service>
<id>jenkins-slave</id>
<name>Jenkins agent (jenkins-slave)</name>
<description>This service runs an agent for Jenkins automation server.</description>
<env name="JENKINS_HOME" value="%BASE%"/>
<executable>%JAVA_HOME%\bin\java.exe</executable>
<arguments>-Xrs -jar "%BASE%\agent.jar" -jnlpUrl http://myserver/computer/selenium/slave-agent.jnlp -secret 2vg4pt44j875m6syy5h9e27lxihej6mwe8swzzay5i7ba9e15xzaj4tx5wq4nla9</arguments>
<logmode>rotate</logmode>
<onfailure action="restart" />
<extensions>
<!-- This is a sample configuration for the RunawayProcessKiller extension. -->
<extension enabled="true"
className="winsw.Plugins.RunawayProcessKiller.RunawayProcessKillerExtension"
id="killOnStartup">
<pidfile>%BASE%\jenkins_agent.pid</pidfile>
<stopTimeout>5000</stopTimeout>
<stopParentFirst>false</stopParentFirst>
</extension>
</extensions>
</service>
S'assurer que la variable d'environnement %JAVA_HOME%
existe bien sur la machine Windows, sinon, à défaut, la créer ou renseigner le chemin long de l'installation de Java.
Enfin, ouvrir une invite de commandes en tant qu’administrateur et lancer la commande suivante pour créer le service ayant pour ID jenkins-slave
:
sc.exe create "jenkins-slave" start= auto binPath= "C:\jenkins\jenkins-slave.exe" DisplayName= "Jenkins agent"
Vérification
- Côté agent
Pour vérifier que le service est bien installé dans Windows, lancer la fenêtre "Exécuter" avec la combinaison de touches Windows+R, puis lancer la commande suivantes :
services.msc
Ensuite, rechercher le service nommé "Jenkins agent" :
Il faut qu'il soit à l'état "En cours d'exécution" pour pouvoir communiquer avec le maître Jenkins et il faut que le type de démarrage soit défini à "Automatique" pour pouvoir se relancer automatique lorsque la machine Windows (re)démarre.
- Côte maître Jenkins
Depuis la page principale, cliquer sur l'esclave précédemment créé :
NB : l'esclave n'est plus hors-ligne mais au repos, ce qui est synonyme du bon établissement de la communication entre le maître et l'esclave.
L'agent doit être "connected" :