Nœuds maître-esclaves

De Wiki de Jordan LE NUFF
< Outillage‎ | Jenkins
Révision datée du 2 juin 2020 à 16:21 par Jordan (discussion | contributions) (Page créée avec « == 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… »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Sauter à la navigation Sauter à la recherche

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écurité - Agents - Désactivé

Sélectionner "Au hasard" et cliquer sur "Enregistrer" :

Sécurité - Agents - Au hasard

Création de l'esclave

Se rendre dans "Administrer Jenkins" (/manage), puis dans "Gérer dans les nœuds" (/computer) :

Gérer les nœuds

Cliquer sur "Créer un nœud" (/computer/new) :

Créer un premier nœud

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 :

Détails du nœud

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
Détails du nœud renseignés

Cliquer sur "Enregistrer". Le nouveau nœud apparaît alors déconnecté :

Liste nœuds - 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éé :

Esclave hors-ligne

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) :

Etat esclave

Si un message d'avertissement s'affiche, cliquer sur "Exécuter" pour lancer l'exécution de l'installateur :

Avertissement Java

Une fois l'agent installé et connecté, une petite fenêtre s'affiche en indiquant le message "Connected" :

Agent Jenkins connecté

Cliquer sur "File", puis sur "Install as a service" afin que l'agent soit installé comme un service Windows :

Agent Jenkins - Installer le service

Un message s'affiche informant de l'utilité d'installer l'agent en tant que service Windows, entre autres :

Agent Jenkins - Information
  • En cas d'erreur :
Le message d'erreur suivant s'affiche si les droits d'administrateur de l'utilisateur ne sont pas suffisant :
Agent Jenkins - Installation - Erreur WMI
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 :
Agent Jenkins - Installation - Raccourci javaws.exe
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é :
Agent Jenkins - Installation - Raccourci mis à jour
Faire de nouveau un clic-droit sur le raccourci et choisir "Exécuter en tant qu'administrateur" :
Agent Jenkins - Installation - Exécution raccourci
  • 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 :

Cmd icon.png Invite de commandes

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
Fenêtre Exécuter - services.msc

Ensuite, rechercher le service nommé "Jenkins agent" :

Service 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éé :

Esclave au repos

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" :

Agent is connected