LAB : Installation & Configuration Jenkins sur Docker#
Présentation#
Objectifs:#
- Installation de Jenkins
- Configuration d'un agent cloud sur Jenkins
- Docker In Docker
- Création d'un pipeline basique pour tester les builds
Prérequis#
- Connaissance de Docker
- Instance docker fonctionnel
- Editeur de code
- Utilitaire installé sur la machine: git
- Avoir un proxy nginx fonctionnel (voir lab deploy reverse proxy sur la section 03-conteneurisation)
Déroulement du Lab#
Etape 1 : Creation du manifeste docker compose#
Dans cette étape, nous allons construire ensemble le manifeste docker-compose en commentant l'utilité de chaque instruction.
Tout d'abord, il faut créer un fichier docker-compose.yaml et mettre le contenu ci-après:
# Indication de la version de l'API
version: '3.8'
# Création d'un volume nommé <jenkins-data> pour la persistance des données.
volumes:
jenkins-data:
name: jenkins-data
# Création d'un réseau nommé <jenkins-network> pour l'ensemble des conteneurs qui vont appartenir à la stack et déclaration du réseau <frontend> utilisé par le proxy nginx.
networks:
jenkins-network:
name: jenkins-network
frontend:
name: frontend
external: true
# Déclaration liste des services
services:
# Service jenkins: Instance Jenkins
jenkins:
# Choix de l'image
image: jenkins/jenkins:jdk21
# Nom du comteneur
container_name: jenkins
# Attachement du service aux réseaux jenkins-network & frontend
networks:
- jenkins-network
- frontend
# Montage du volume pour la persitence des données et du socket docker pour autoriser le docker-in-docker
volumes:
- jenkins-data:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
# Toujours forcer le rédémarrage du conteneur en cas de problème.
restart: always
# Activation du mode priviligié sur le conteneur
privileged: true
# Démarrage du conteneur en mode root
user: root
Etape 2: Execution des services#
A ce stade, toutes les configurations sont finalisées. Il ne reste plus qu'à démarrer les services
- Démarrage des services
La commande ci-dessous permet de démarrer tous les services en arrière-plan.
docker compose up -d
- Affichage des conteneurs
docker ps -a --filter name=jenkins
Etape 2 : Récupération du code source#
La commande suivante permet de récupérer le code source contenant les fichiers samples du proxy nginx.
git clone https://github.com/wingufactory/lecloudfacile-devops-labs.git
Etape 4: Mise à jour de la configuration du proxy#
Le répertoire lecloudfacile-devops-labs/nginx-proxy/conf.d/jenkins contient un example de configuration du proxy pour la gestion des requêtes entrantes en ce concerne l'application jenkins. Nous pourrons la copier dans le répertoire
lecloudfacile-devops-labs/nginx-proxy/conf.d avec la bonne extension .conf
cd lecloudfacile-devops-labs/nginx-proxy/
cp conf.d/jenkins/jenkins.scratch.conf.template conf.d/jenkins.conf
Il faudra recharger la configuration du proxy pour prendre en compte les modifications apportées.
docker exec -ti proxy nginx -s reload
Etape 5: Accès à l'application#
Ouvrir un navigateur et taper l'adresse suivante : http://jenkins.lcf.io
Etape 6: Finalisation de l'installation#
1 - Récupérer du mot de passe initial
docker exec -ti jenkins cat /var/jenkins_home/secrets/initialAdminPassword
2 - Copier le mot de passe sur le champ Administrator password puis cliquer sur continuer

3 - Cliquer sur Installer les plugins suggérés

Un lot de plugin sera installé

4 - Créer le premier utilisateur comme suit

5 - Vérifier que Jenkins URL est bien positionné à jenkins.lcf.io puis cliquer sur Save and Finish

Une fenêtre vous indique que votre instance Jenkins est prête. Cliquer sur Commencer à utiliser Jenkins

Vous devez obtenir une vue similaire à la suivante

Etape 7: Configuration agent Cloud#
Jenkins recommande l'usage d'agent pour des builds distribués. Nous pouvons voir sur le message en cliquant sur l'icone de sécurité (voir image suivante). La procédure ci-après permet de configurer un agent Docker.
1- Cliquer sur le bouton setup cloud

2- Cliquer sur Install a plugin

Vous verrez la liste des providers disponibles

3- Cocher l'option Docker puis cliquer sur le bouton Installer

Vous pouvez apercevoir la progession de l'installation. N'oubliez pas de cocher l'option Redémarrer Jenkins quand l'installation est terminée et qu'aucun job n'est en cours

4- Après redémarrage, vous serez à nouveau rediriger vers la page de login. Veuillez vous authentifier

5- Après authentification, nous verrons une autre erreur indiquant la nécessité de ne pas programmer de build sur le master. Pour ce faire, cliquer sur le bouton Manage.

6- Mettre Nombre d'éxecuteurs à 0 puis cliquer sur Sauvegarder

7- Le message warning disparait. Cliquer sur tableau de bord pour revenir à l'accueil

5- Sur la page d'acceuil, cliquer sur Configure a cloud

6- Cliquer sur Nouveau cloud

7- Entrer le nom Docker-In-Docker puis cocher Type Docker et cliquer sur Create

vous aurez une vue similaire à a suivante:

8- Configurer la section Docker Cloud Details
- Dépiler sur Docker Cloud Details
- Renseigner unix:///var/run/docker.sock dans Docker Host URI
- Cocher Enabled
- Cliquer sur le bouton Test Connection

9- Configurer la section Docker Agent Template
- Dépiler Docker Agent Template
- Cliquer sur Add Docker Template

- Renseigner
inbound-agentdans les champsNameet `Labels`` - Cocher le champ
Enbaled - Renseigner
lecloudfacile/jenkins-agent:1.0.0dans le champDocker Image

- Dépiler Container settings
- Renseigner
rootdans le champUser - Renseigner
type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sockdans le champMounts

- Scroller vers le bas
- Choisir
Attach Docker Containerdans le champConnect method - Renseigner
rootdansUser - Cliquer sur
Savepour enregistrer
Une fois enregistré, vous pouvez voir les détails de l'agent. Merci de cliquer sur Tableau de bord pour revenir à l'accueil

Etape 6: Création d'un pipeline pour tester Docker-In-Docker#
1 - Cliquer sur New Item

2- Renseigner le nom du pipeline Test Docker-In-Docker, selectionner Pipeline puis cliquer sur OK.

3 - Scroller vers le bas et mettre le code ci-après dans la section Script
pipeline {
agent any
stages {
stage('Hello') {
steps {
sh 'docker ps'
}
}
}
}
Comme sur la figure ci-dessous

- Cliquer sur
lancer un buildpour l'execution du pipeline

- Cliquer sur l'icone bleu avec
...sur la sectionBuildspour afficher la sortie de l'execution du pipeline

- Nous voyons que l'execution du pipeline s'est effectuée avec succès.
