Skip to content

LAB : Pipeline de build d'une application Spring avec Jenkins#

Présentation#

Objectifs:#

  • Mise en place d'une pipeline jenkins de Build d'une application Spring et push vers DockerHub
  • Configuration des credentials de communication entre Jenkins et DockerHub

Prérequis#

  • Connaissance de Docker et GIT
  • 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)
  • Avoir un jenkins de fonctionnel voir lab précèdent

Déroulement du Lab#

Etape 1 : Création du pipeline sur Jenkins#

Dans cette étape, on va créer un pipeline jenkins pour récupèrer l'application Spring-Boot hébergée sur GitHub et build avec Docker.

1- Créer un job de type pipeline en cliquant sur Nouveau Item en lui donnant le nom build-springboot

2- Dans la partie Script, mettre le contenu ci-dessous

pipeline {
    agent any

    stages {
        stage('clone Project') {
            steps {
                git branch: 'main', url: 'https://github.com/wingufactory/lecloudfacile-devops-labs.git'
            }
        }
        stage('Build Docker Image') {
            steps {
                sh 'docker build -t moodboard-backend-app:1.0.0 springboot-react-app/moodboard-backend'
                sh 'docker build -t moodboard-frontend-app:1.0.0 springboot-react-app/moodboard-frontend'
            }
        }
    }
}

comme sur la figure ci-dessous :

3- Cliquer sur Save

Etape 2 : Exécution du pipeline#

1- Cliquer sur Lancer un build pour éxècuter le pipeline

2- une fois le job lancé avec succès, cliquer sur le job, puis Console Ouput pour afficher la sortie de l'execution du pipeline

Etape 3 : Vérification#

Se rendre sur la machine éxècutant le conteneur jenkins et lancer la commande ci-dessous pour visualiser les images buildées

docker images

Etape 4 : Ajout push images vers DockerHub#

Maintenant dans cette étape, on va rajouter une étape de push de nos images buildés vers Dockerhub

1- Se rendre sur votre compte DockerHub
2- Génèrer un token de connexion à DockerHub en se rendant sur le profil, puis dans Account settings,

3- Ensuite se rendre sur Personal access tokens et et cliquer sur Generate new token

4- Dans le champ de description, renseigner : token-dockerhub-jenkins, puis dans Access permissions, choisir Read & Write et enfin cliquer sur Generate

5- Cliquer sur Copy pour copier le token génèré et le sauvegarder quelque part.
N.B : La visualisation du token n'est disponible qu'une fois. Une fois fermé la page, il ne sera plus consultable.

6- Se rendre sur Jenkins pour configurer le credentials qui va stocker notre token

  • Dans la page d'administration de Jenkins Administer Jenkins, se rendre dans Credentials, ensuite Identifiants globaux (illimité) et cliquer sur Add Credentials

--> Renseigner le nom d'utilisateur de son compte Dockerhub dans le champs Nom d'utilisateur

--> Renseigner dans le champs Mot de passe le token génèré sur DockerHub

--> Dans le champ ID, renseigner token-dockerhub-jenkins

--> Dans le champ Description, renseigner Identifiants de connexion à Dockerhub

--> Enfin cliquer sur Create

7- Rajouter l'étape de push vers DockerHub dans notre pipeline Jenkins

  • Se rendre sur le job build-springboot, cliquer sur Configurer, puis mettre ce contenu :

N.B : Dans les stages Tag Docker Image et Push to DockerHub, remplacer l'utilisateur lecloudfacile par votre propre utilisateur Dockerhub comme renseigné dans la partie credentials

pipeline {
    agent any

    stages {
        stage('clone Project') {
            steps {
        // Clone le repo Github pour récumèrer le code source
                git branch: 'main', url: 'https://github.com/wingufactory/lecloudfacile-devops-labs.git'
            }
        }
        stage('Build Docker Image') {
            steps {
        // Construction de l'image Docker pour le backend
                sh 'docker build -t moodboard-backend-app:1.0.0 springboot-react-app/moodboard-backend'

                // Construction de l'image Docker pour le frontend
                sh 'docker build -t moodboard-frontend-app:1.0.0 springboot-react-app/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
                    """
                }
            }
        }
    }
}
  • Lancer un nouveau build du job

8- Vérifier que notre image est bien présente sur DockerHub

  • Se rendre sur DockerHub, cliquer sur les petits points à gauche du compte, puis sur Docker Hub pour visualiser les images