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.
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 :
Slave Jenkins standalone :
Slave Jenkins in Docker :
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]-----+
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
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.
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 :
Une fois tous les champs renseignés valider en cliquant sur “OK”.
Arriver à cette étape, nous avons crée notre utilisateur “jenkins”
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” :
Notre nouveau server slave (Node01) est disponible et fonctionnel.
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” :
Cliquer sur “Advanced” et compléter les deux champs ci-dessous :
Note:
On NAT les flux 2222 vers le port 22 du conteneur.
Une fois les configurations terminées, notre agent conteneurisé est opérationnel.