LAB : Création d'une pipeline multibranche#
Présentation#
Un pipeline multibranche (multibranch pipeline) dans Jenkins est un type de pipeline qui détecte automatiquement toutes les branches d’un dépôt Git (comme GitHub) et crée un pipeline distinct pour chacune.
L'intéret est de permettre de pouvoir tester, builder, et déployer indépendamment chaque branche GIT et de pouvoir se baser sur les branches pour déclencher des process de déploiement automatsés vers différents environnements.
Objectifs:#
- Mise en place d'une pipeline multibranche sur jenkins pour gèrer plusieurs plusieurs branches dans un meme projet
- Automatisez le build d'application pour chaque branche GIT
- Configuration des credentials de communication entre Jenkins et Github
Prérequis#
- Connaissance de Docker et GIT
- Instance docker fonctionnel
- Editeur de code
- Utilitaire installé sur la machine: git
- Avoir un compte sur Github
- Avoir un proxy nginx fonctionnel (voir lab deploy reverse proxy sur la section 03-conteneurisation)
- Avoir un jenkins de fonctionnel voir lab précèdent
Déroulement du Lab#
Etape 1 : Configuration de Github#
1- Création du token sur GitHub
- Se rendre sur son compte Github, cliquer sur le profil, puis sur
Settings

- Ensuite se rendre sur
Developer settings, puisPersonal access tokenset ensuite surTokens (classic)


- Cliquer sur
Generate new tokeni (classic)

- Renseigner sur la partie Note :
token-github, selectionner les scopes : repo, user et project, et cliquer surGenerate token

- Copier le token généré et le sauvegarder. Comme avec Dockerhub, pour des raisons de sécurité,ce token ne pourra etre visualisé qu'une fois.

2- Hébergement du code SpringBoot sur GitHub
- Création du repo sur Github
Se rendre sur la page d'accueil de GitHub, cliquer sur le "+", puis sur New repository

Renseigner springboot-react-app dans Repository name, puis mettre la description Mon application Springbootet rendre le projet private
Enfin cliquer sur create repository

- Récupèration du code SpringBoot
git clone https://github.com/wingufactory/lecloudfacile-devops-labs.git
cd lecloudfacile-devops-labs/springboot-react-app
- Push du code SpringBoot sur Github
Dans cette partie, on va pousser notre code dans le repository Github créé précèdemment
Se rendre dans le dossier contenant le code, et rajouter un fichier .gitgnore avec comme contenu .env pour éviter de pousser des secrets sur GitHub
cd lecloudfacile-devops-labs/springboot-react-app
echo ".env" >> .gitignore
Pousser le code vers GitHub
N.B : Remplacer <username> et <usermail> par ses propres identifiants Github
git init
git config user.email "<usermail>"
git config user.name "<Prenom et Nom>"
git remote add origin https://github.com/<username>/springboot-react-app.git
git branch -M main
git add .
git commit -m "first init"
git push -u origin main
Etape 2 : Ajout du Credential Github sur Jenkins#
Comme durant le lab précèdent, on va renseigner, dans les credentials de Jenkins, le token Github généré précèdemment
Dans les identifiants globaux des credentials, créer un nouveau credential comme ci-dessous :
- Renseigner le nom d'utilisateur de son compte GitHub dans le champs
Nom d'utilisateur - Renseigner dans le champs
Mot de passele token génèré sur GitHub - Dans le champ
ID, renseignertoken-github-jenkins - Dans le champ
Description, renseignerIdentifiants de connexion à Github - Enfin cliquer sur
Create

Etape 3 : Ajout du Jenkinsfile sur Github#
- Se rendre en ligne de terminal et dans le dossier springboot-react-app pour créer, depuis la branche main, un nouveau fichier nommé
Jenkinsfileavec le contenu suivant:
N.B : Remplacer l'utilisateur lecloudfacile par vos propres noms d'utilisateurs de DockerHub et GitHub
pipeline {
agent any // Utilise n'importe quel agent Jenkins disponible
stages {
stage('Clone Project') {
steps {
// Clone automatiquement la branche courante dans un pipeline multibranch
checkout scm
}
}
stage('Build Docker Image') {
steps {
// Construction de l'image Docker pour le backend
sh 'docker build -t moodboard-backend-app:1.0.0 moodboard-backend'
// Construction de l'image Docker pour le frontend
sh 'docker build -t moodboard-frontend-app:1.0.0 moodboard-frontend'
}
}
stage('Tag Docker Image') {
steps {
// Tag des images Docker avec les noms de dépôt sur Docker Hub
sh 'docker image tag moodboard-frontend-app:1.0.0 lecloudfacile/moodboard-frontend-app:1.0.0'
sh 'docker image tag moodboard-backend-app:1.0.0 lecloudfacile/moodboard-backend-app:1.0.0'
}
}
stage('Push to DockerHub') {
steps {
echo "Pushing image to Docker Hub..."
// Utilisation des identifiants Jenkins pour se connecter à Docker Hub
withCredentials([usernamePassword(
credentialsId: "token-dockerhub-jenkins",
usernameVariable: "DOCKER_USER",
passwordVariable: "DOCKER_PASSWORD"
)]) {
// Connexion et push des images Docker vers Docker Hub
sh """
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USER" --password-stdin
docker push lecloudfacile/moodboard-frontend-app:1.0.0
docker push lecloudfacile/moodboard-backend-app:1.0.0
"""
}
}
}
stage('Deploy to Environment') {
steps {
script {
// Étape conditionnelle de déploiement selon la branche
if (env.BRANCH_NAME == 'dev') {
echo 'Deploy code to DEV'
} else if (env.BRANCH_NAME == 'main') {
echo 'Deploy code to PROD'
} else {
// Pour les autres branches, aucun déploiement n'est effectué
echo "No deployment step for branch: ${env.BRANCH_NAME}"
}
}
}
}
}
}
- Pousser les modifications sur GitHub
git add Jenkinsfile
git commit -m "Ajout pipeline"
git push origin main
- Créer une branche
devet repousser les modifications sur Github
git checkout dev
git push origin dev
Etape 4 : Création du pipeline multibranch sur Jenkins#
Se rendre sur Jenkins pour créer le pipeline multibranch qui va exécuter notre pipeline en fonction des différentes branches
- Créer un nouveau job de type
Pipeline Multibranchesen lui donnant le nombuild-springboot-multibranch

- Dans la section
Branch Sources, cliquer surAdd sourceet sélectionnerGithub

- Puis renseigner l'url du projet Github
https://github.com/<username>/springboot-react-app.gitet sélectionner le credential de connexion à Github renseigné précèdemment

- Cliquer sur
Save
Le pipeline va scanner toutes les branches existantes et éxécuter le Jenkinsfile s'y trouvant

Etape 5 : Vérification#
- En retournant à la racine de notre job, on peut voir nos deux branches
mainetdev.

- En cliquant sur la branche de
devet surconsole outputdu job lancé en dev, on peut voir le résultat de la sortie de notre stage de déploiement qui renvoie le résultatDeploy code to DEV.

- De meme sur le job de la branche
main, on voit le résultatDeploy code to PROD
