pipeline { agent any environment { NODEJS_HOME = "${tool 'NodeJS'}" PATH = "${env.NODEJS_HOME}/bin:${env.PATH}" DEV_URL = "dev.foodgame.fr" PREPROD_URL = "preprod.foodgame.fr" PROD_URL = "prod.foodgame.fr" } stages { stage('Setup Environment') { steps { script { echo "Environnement détecté : ${env.BRANCH_NAME}" if (env.BRANCH_NAME == 'test') { echo "Déploiement sur DEV (${DEV_URL})" } else if (env.BRANCH_NAME == 'dev') { echo "Déploiement sur PREPROD (${PREPROD_URL})" } else if (env.BRANCH_NAME == 'master') { echo "Déploiement sur PROD (${PROD_URL})" } else { error "Branche non prise en charge : ${env.BRANCH_NAME}" } } sh 'npm --version' } } stage('Checkout Code') { steps { deleteDir() checkout scm } } // stage('SonarQube Analysis') { // steps { // script { // def scannerHome = tool name: 'SonarQube Scanner', type: 'hudson.plugins.sonar.SonarRunnerInstallation'; // withSonarQubeEnv('SonarQube') { // Nom du serveur SonarQube configuré dans Jenkins // sh """ // ${scannerHome}/bin/sonar-scanner \ // -Dsonar.projectKey=FatboarProject-${env.BRANCH_NAME} \ // -Dsonar.sources=. \ // -Dsonar.host.url=https://sonarqube.foodgame.fr \ // -Dsonar.login=sqa_d81445ef2d3961cddf7e29e31c1aeb2505aacdbd // """ // } // } // } // } // stage('Stop Containers') { // steps { // sh ''' // docker ps | grep "workflow_" -v | awk -F " " '{ if(NR>1) print $1}' | xargs docker kill || true // docker system prune -f // ''' // } // } // stage('Build & Deploy') { // steps { // sh ''' // docker-compose stop // docker-compose build // docker-compose up -d // ''' // } // } // stage('Push Docker Image (Nexus)') { // when { // branch 'master' // } // steps { // withDockerRegistry([credentialsId: 'nexus', url: 'https://nexus.foodgame.fr']) { // script { // def dockerImageName = 'workflow_jenkins_1' // def dockerImageTag = 'latest' // def nexusRepository = 'fatboar_repo' // sh """ // docker tag ${dockerImageName}:${dockerImageTag} ${nexusRepository}/${dockerImageName}:${dockerImageTag} // docker push ${nexusRepository}/${dockerImageName}:${dockerImageTag} // """ // } // } // } // } stage('Docker Registry Login, Pull, and Push') { when { branch 'master' } steps { script { def registryUrl = 'nexus.foodgame.fr:8123' def imageName = 'sonarqube' def imageVersion = 'latest' docker.withRegistry("https://${registryUrl}", 'nexus') { try { // Try pulling the image from the registry echo "Trying to pull image: ${registryUrl}/${imageName}:${imageVersion}" docker.image("${registryUrl}/${imageName}:${imageVersion}").pull() } catch (Exception e) { echo "Image pull failed. Attempting to build and push." // Pull base image from Docker Hub echo "Pulling base image: ${imageName}:${imageVersion}" sh "docker pull ${imageName}:${imageVersion}" // Tag the image for the private registry echo "Tagging image for private registry" sh "docker tag ${imageName}:${imageVersion} ${registryUrl}/${imageName}:${imageVersion}" // Push the tagged image to the private registry echo "Pushing image to private registry" sh "docker push ${registryUrl}/${imageName}:${imageVersion}" } } } } } stage('Cleanup') { steps { echo "Nettoyage terminé pour la branche ${env.BRANCH_NAME}" } } stage('Fin du Pipeline') { steps { sh 'echo "Félicitations, le pipeline s\'est terminé avec succès !"' } } } post { success { echo "Pipeline exécuté avec succès pour la branche ${env.BRANCH_NAME}." } failure { echo "Échec du pipeline pour la branche ${env.BRANCH_NAME}." } } } // node{ // env.NODEJS_HOME = "${tool 'NodeJS'}" // // on linux / mac // env.PATH="${env.NODEJS_HOME}/bin:${env.PATH}" // // on windows // //env.PATH="${env.NODEJS_HOME};${env.PATH}" // sh 'npm --version' // stage('checkout') // { // deleteDir() // checkout scm // } // stage('Stop Containers') // { // sh 'docker ps | grep "workflow_" -v | awk -F " " \'{ if(NR>1) print $1}\' |xargs docker kill |xargs docker rm || true' // sh 'docker system prune -f' // } // // stage("Push preprod images to nexus") // // { // // docker.withRegistry('http://localhost:8083','885ef60c-9352-489a-bd1c-e4b695747c21') // // { // // imageApache.push('latest') // // imageExpress.push('latest') // // }*/ // // } // // stage('SonarQube analysis') // // { // // def scannerHome = tool name: 'SonarQube Scanner', type: 'hudson.plugins.sonar.SonarRunnerInstallation'; // // withSonarQubeEnv('SonarQube') // // { // // // If you have configured more than one global server connection, you can specify its name // // sh "${scannerHome}/bin/sonar-scanner \ // // -Dsonar.projectKey=FatboarProject \ // // -Dsonar.sources=. \ // // -Dsonar.host.url=https://sonarqube.foodgame.fr \ // // -Dsonar.login=sqp_09ee9072c917af8212864baf0f75c950afc14c64" // // } // // } // stage('Build Docker MEAN Stack(Test Deployment)') // { // sh 'docker-compose -v' // sh 'docker-compose build' // sh 'docker-compose up -d' // } // stage('Fin du Pipeline') // { // sh 'echo "Félicitation tout c\'est bien déroulé!"' // } // }