formation hai 11 meses
pai
achega
216fb01c9a
Modificáronse 1 ficheiros con 160 adicións e 40 borrados
  1. 160 40
      Jenkinsfile

+ 160 - 40
Jenkinsfile

@@ -1,50 +1,170 @@
-
-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'
+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 == 'dev') {
+                        echo "Déploiement sur DEV (${DEV_URL})"
+                    } else if (env.BRANCH_NAME == 'preprod') {
+                        echo "Déploiement sur PREPROD (${PREPROD_URL})"
+                    } else if (env.BRANCH_NAME == 'prod') {
+                        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('Push Docker image to Nexus') {
-    //     withDockerRegistry([credentialsId: 'nexus', url: 'https://nexus.foodgame.fr']) {
-    //         // Définition des variables
-    //         def dockerImageName = 'workflow_jenkins_1'
-    //         def dockerImageTag = 'latest'
-    //         def nexusRepository = 'fatboar_repo'
+        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=sqp_09ee9072c917af8212864baf0f75c950afc14c64
+                        """
+                    }
+                }
+            }
+        }
 
-    //         // Étape de balisage de l'image Docker pour le registre Nexus
-    //     sh "docker tag ${dockerImageName}:${dockerImageTag} ${nexusRepository}/${dockerImageName}:${dockerImageTag}"
+        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
+                '''
+            }
+        }
 
-    //         // Étape de poussée de l'image Docker vers le registre Nexus
-    //     sh "docker push ${nexusRepository}/${dockerImageName}:${dockerImageTag}"
-    //     }
-    // }
+        stage('Build & Deploy') {
+            steps {
+                sh '''
+                docker-compose stop
+                docker-compose build
+                docker-compose up -d
+                '''
+            }
+        }
 
-    
+        stage('Push Docker Image (Nexus)') {
+            when {
+                branch 'prod'
+            }
+            steps {
+                withDockerRegistry([credentialsId: 'nexus', url: 'https://nexus.foodgame.fr']) {
+                    script {
+                        def dockerImageName = 'workflow_jenkins_1'
+                        def dockerImageTag = 'latest'
+                        def nexusRepository = 'fatboar_repo'
 
-    stage('Build Docker MEAN Stack(PreProduction Deployment)') {
-        sh 'docker-compose -v'
-        sh 'docker-compose stop'
-        sh 'docker-compose build'
-        sh 'docker-compose up -d'
-    }
+                        sh """
+                        docker tag ${dockerImageName}:${dockerImageTag} ${nexusRepository}/${dockerImageName}:${dockerImageTag}
+                        docker push ${nexusRepository}/${dockerImageName}:${dockerImageTag}
+                        """
+                    }
+                }
+            }
+        }
 
-    stage('Fin du Pipeline') {
-       sh 'echo "Félicitation tout s\'est bien déroulé!"'  
-   }
+        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é!"'  
+//    }
+// }