formation пре 11 месеци
родитељ
комит
f1ba234d0b
1 измењених фајлова са 167 додато и 51 уклоњено
  1. 167 51
      Jenkinsfile

+ 167 - 51
Jenkinsfile

@@ -1,57 +1,173 @@
-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('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
+                        """
+                    }
+                }
+            }
+        }
+
+        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 'prod'
+            }
+            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('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("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('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é!"'  
-   }
-}
+//     stage('Fin du Pipeline') 
+//     {
+//        sh 'echo "Félicitation tout c\'est bien déroulé!"'  
+//    }
+// }