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.
Environnement
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
Schéma d'architecture
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.