Introduction

L'architecture Jenkins est conçue pour les environnements de construction distribués. Elle nous permet d'utiliser différents environnements pour chaque projet de construction en équilibrant la charge de travail entre plusieurs agents qui exécutent des tâches en parallèle.

Le contrôleur Jenkins est le nœud original (Master) de l'installation Jenkins. Le contrôleur Jenkins administre les agents Jenkins et orchestre leur travail, y compris la programmation des travaux sur les agents et la surveillance des agents. Les agents peuvent être connectés au contrôleur Jenkins en utilisant des ordinateurs locaux ou dans le cloud.

Note:

Les agents ont besoin d'une installation Java et d'une connexion réseau au contrôleur Jenkins.

Agents : Standalone/Docker

Les agents Jenkins peuvent être lancés dans des machines physiques, des machines virtuelles, des clusters Kubernetes et avec des images Docker.

Pour exécuter ce guide, vous aurez besoin des machines machines suivantes :

Master Jenkins :

  • Installation Java
  • Installation de Jenkins
  • Une paire de clés SSH

Slave Jenkins standalone :

  • Installation Java

Slave Jenkins in Docker :

  • Installation de Docker

Step 1 : Serveur master Jenkins

Tout d'abord, sur le serveur exécutant Jenkins (Master), nous allons générer une paire de clé SSH pour l'utilisateur “jenkins”.

Note:

Pour rappel, notre plateforme Jenkins est lancé par le user “jenkins”

Dans une fenêtre de terminal, exécutez la commande suivante an tant qu'utilisateur “jenkins” :

jenkins@master:~$ ssh-keygen -t rsa

Confirmez que la sortie ressemble à quelque chose comme ceci :

jenkins@master:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/jenkins/.ssh/id_rsa
Your public key has been saved in /home/jenkins/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:XqxxjqsLlvDD0ZHm9Y2iR7zC6IbsUlMEHo3ffy8TzGs
The key's randomart image is:
+---[RSA 3072]----+
|  o+             |
| ...o  .         |
|  .o .+ .        |
|    o+.+ o o     |
|  ... o.So* .    |
|  o+ = +.X=      |
| o oO + *..+     |
|. oo.o o .E .    |
| o... oo.. o     |
+----[SHA256]-----+

Step 2 : Server Jenkins slave

Installer java

user@node01:~$ sudo apt install default-jre

Sur le serveur faisant office de slave, nous allons créer un utilisateur “jenkins” qui va permettre au server “Master” de se connecter.

Création d'un utilisateur “jenkins

user@node01:~$ sudo useradd -s /bin/bash -d /home/jenkins -m jenkins

Définition d'un mot de passe pour le nouveau utilisateur “jenkins”

user@node01:~$ sudo passwd jenkins
New password:
Retype new password:
passwd: password updated successfully

Step 3 : Server master Jenkins

Maintenant que notre serveur slave dispose d'un utilisateur “jenkins” nous allons procéder au transfert de clé SSH depuis le serveur Master.

En tant qu'utilisateur “jenkins” sur le serveur master, lancer la commande “ssh-copy-id”.

Note:

Il vous sera demandé le mot de passe de l'utilisateur “jenkins” distant.

jenkins@jenkins:~$ ssh-copy-id jenkins@node01
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/var/lib/jenkins/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
jenkins@node01's password: 
 
Number of key(s) added: 1
 
Now try logging into the machine, with:   "ssh 'jenkins@node01'"
and check to make sure that only the key(s) you wanted were added.

Step 4 : Identifiant SSH pour Jenkins

Arrivé à cette étape, nous disposons d'un serveur Master (Jenkins) ainsi que d'un serveur Slave avec un utilisateur “jenkins”.

Le transfert de clé SSH de l'utilisateur “Jenkins” (Serveur Master) à destination de l'utilisateur “jenkins” (Server Slave) à été réalisé précédemment.

Maintenant, nous allons déclarer un utilisateur 'jenkins' dans l'interface de Jenkins.

Cliquer sur “Manage Jenkins” > “Manage Credentials

Dans la partie “Global”, cliquer sur “Add credentials

Jenkins nous ouvre une fenêtre dans laquelle, nous allons renseigner les informations pour que le serveur se connecte au slave.

Renseigner les informations comme indiqué ci-dessous et valider :

  • Kind : SSH Username with private key
  • Id : jenkins
  • Description: Jenkins SSH Keys
  • Username : jenkins
  • Private Key: sélectionner “Enter directly” et cliquer sur “Add” pour ajouter la clé SSH (clé privée).

Une fois tous les champs renseignés valider en cliquant sur “OK”.

Arriver à cette étape, nous avons crée notre utilisateur “jenkins

Déclaration Jenkins Standalone node

Maintenant que nous avons notre utilisateur “jenkins” déclaré, nous allons pouvoir ajouter notre Jenkins slave.

Dans “Manage Jenkins” > “Manage Nodes and Clouds

Dans le menu de gauche, cliquer sur “New Node

Renseigner le nom du nouveau nœud. Dans l'exemple qui suit, nous l'avons appelé : “Node01”.

Sélectionner “Permanante Agent” puis “OK

Renseigner les informations comme indiqué et cliquer sur “save” :

  • Name : Node01
  • Remote root directory : “/home/jenkins”
  • Labels : Node01
  • Usage : Use this node as much as possible
  • Launch method : Launch agents via SSH
    • Host : <Renseigner l'IP/FQDN du host >
    • Credentials : <Sélectionner le compte jenkins>

Notre nouveau server slave (Node01) est disponible et fonctionnel.

Déclaration Jenkins Docker node

Ici, nous allons utiliser l'image docker-ssh-agent pour créer les conteneurs de l'agent.

Exécutez la commande pour démarrer votre premier agent doker :

$ docker run -d --rm --name=jenkins-slave -p 2222:22 \
-e "JENKINS_AGENT_SSH_PUBKEY=ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCvx6McCvA7i.... jenkins@jenkins" \
jenkins/ssh-agent:alpine

Note:

Ne pas oublier de remplacer la clé SSH par celle de votre utilisateur “jenkins

Normalement, une fois la commande lancé sur notre serveur docker, nous devons voir notre containe 'jenkins-slave' tourner.

Lancer la commande suivante pour vérifier.

$ docker ps -a
CONTAINER ID   IMAGE                      COMMAND        CREATED         STATUS         PORTS                                   NAMES
234f17f5371d   jenkins/ssh-agent:alpine   "setup-sshd"   4 minutes ago   Up 4 minutes   0.0.0.0:2222->22/tcp, :::2222->22/tcp   jenkins-slave

Nous allons maintenant déclarer notre jenkins-slave dans la “Web UI”.

Dans “Manage Jenkins” > “Manage Nodes and Clouds

Dans le menu de gauche, cliquer sur “New Node

Renseigner le nom du nouveau nœud. Dans l'exemple qui suit, nous l'avons appelé : “docker-slave”.

Sélectionner “Permanante Agent” puis “OK

Renseigner les informations comme indiqué et cliquer sur “save” :

  • Name : docker-slave
  • Remote root directory : “/home/jenkins”
  • Labels : docker-slave
  • Usage : Only build jobs with label expressionsmatching this node
  • Launch method : Launch agents via SSH
  • Host : <Renseigner l'IP/FQDN du host >
  • Credentials : <Sélectionner le compte jenkins>
  • Host Key Verification Strategy : Manually trusted key Verification Strategy

Cliquer sur “Advanced” et compléter les deux champs ci-dessous :

  • Port : 2222
  • JavaPath : /opt/java/openjdk/bin/java

Note:

On NAT les flux 2222 vers le port 22 du conteneur.

Une fois les configurations terminées, notre agent conteneurisé est opérationnel.

Annexe

Ce site web utilise des cookies. En utilisant le site Web, vous acceptez le stockage de cookies sur votre ordinateur. Vous reconnaissez également que vous avez lu et compris notre politique de confidentialité. Si vous n'êtes pas d'accord, quittez le site.En savoir plus