Prechádzať zdrojové kódy

environnement config

DESKTOP-SMCIPAV\falko 5 mesiacov pred
rodič
commit
07b18d591e
2 zmenil súbory, kde vykonal 95 pridanie a 57 odobranie
  1. 95 57
      Jenkinsfile
  2. 0 0
      docker-compose.preprod.yml

+ 95 - 57
Jenkinsfile

@@ -1,63 +1,56 @@
 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"
+
+        DOCKER_REGISTRY = "nexus.foodgame.fr:8123"
+        IMAGE_NAME = "fatboar_repo/workflow_jenkins_1"
+        IMAGE_TAG = "latest"
     }
-    stages {
-        
 
-        stage('Docker Registry Login, Pull, and Push') {
-            when {
-                branch 'dev'
-            }
+    stages {
+        stage('Select Environment') {
             steps {
                 script {
-                    def registryUrl = 'nexus.foodgame.fr:8123'
-                    def imageName = 'quay.io/prometheus/node-exporter'
-                    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}"
-                        }
+                    if (env.BRANCH_NAME == 'feature') {
+                        env.ENV = 'dev'
+                        env.COMPOSE_FILE = 'docker-compose.dev.yml'
+                        env.URL = "dev.foodgame.fr"
+                        env.BACKUP_CONTAINER = "mongodb-backup-dev"
+                    } else if (env.BRANCH_NAME == 'dev') {
+                        env.ENV = 'preprod'
+                        env.COMPOSE_FILE = 'docker-compose.preprod.yml'
+                        env.URL = "preprod.foodgame.fr"
+                        env.BACKUP_CONTAINER = "mongodb-backup-preprod"
+                    } else if (env.BRANCH_NAME == 'master') {
+                        env.ENV = 'prod'
+                        env.COMPOSE_FILE = 'docker-compose.prod.yml'
+                        env.URL = "fatboar.foodgame.fr"
+                        env.BACKUP_CONTAINER = "mongodb-backup-prod"
+                    } else {
+                        error "Branche non gérée : ${env.BRANCH_NAME}"
                     }
+                    echo "Déploiement sur l'environnement ${env.ENV} (${env.URL})"
                 }
             }
         }
-        stage('Stop Containers') {
+
+        stage('Install Dependencies & Test') {
             steps {
                 sh '''
-                 docker ps | grep "workflow_" -v | awk -F " " '{ if(NR>1) print $1}' | xargs docker kill || true
-                docker system prune -f
-               '''
+                    npm install --legacy-peer-deps
+                    npm run test -- --no-watch --no-progress --browsers=ChromeHeadless
+                '''
             }
-       }
+        }
 
-       stage('SonarQube Analysis') {
+        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
+                    def scannerHome = tool name: 'SonarQube Scanner', type: 'hudson.plugins.sonar.SonarRunnerInstallation'
+                    withSonarQubeEnv('SonarQube') {
                         sh """
                         ${scannerHome}/bin/sonar-scanner \
                         -Dsonar.projectKey=FatboarProject-${env.BRANCH_NAME} \
@@ -69,38 +62,83 @@ pipeline {
                 }
             }
         }
-         
-       stage('Build & Deploy') {
-           steps {
-            sh '''
-               docker-compose stop
-               docker-compose build --no-cache
-               docker-compose up -d --force-recreate --remove-orphans
-               '''
-  }
-}
 
-        
+        stage('Stop & Clean Containers') {
+            steps {
+                sh """
+                    docker ps | grep "workflow_" -v | awk '{if(NR>1) print \$1}' | xargs docker kill || true
+                    docker-compose -f ${env.COMPOSE_FILE} down || true
+                    docker system prune -f
+                """
+            }
+        }
+
+        stage('Build & Deploy') {
+            steps {
+                sh """
+                    docker-compose -f ${env.COMPOSE_FILE} build --no-cache
+                    docker-compose -f ${env.COMPOSE_FILE} up -d --force-recreate --remove-orphans
+                """
+            }
+        }
+
+        // stage('Backup') {
+        //     steps {
+        //         script {
+        //             echo "Lancement du backup sur le container ${env.BACKUP_CONTAINER}"
+        //             def backupCmd = "docker exec ${env.BACKUP_CONTAINER} /backup.sh || echo '⚠️ Backup ${env.ENV.toUpperCase()} échoué'"
+        //             sh backupCmd
+        //         }
+        //     }
+        // }
+
+        stage('Push to Private Registry (Optional)') {
+            when {
+                anyOf {
+                    branch 'dev'
+                    branch 'master'
+                }
+            }
+            steps {
+                script {
+                    docker.withRegistry("https://${DOCKER_REGISTRY}", 'nexus') {
+                        try {
+                            echo "Pull image from registry"
+                            docker.image("${DOCKER_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}").pull()
+                        } catch (Exception e) {
+                            echo "Build and push image"
+                            sh """
+                                docker pull ${IMAGE_NAME}:${IMAGE_TAG}
+                                docker tag ${IMAGE_NAME}:${IMAGE_TAG} ${DOCKER_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}
+                                docker push ${DOCKER_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}
+                            """
+                        }
+                    }
+                }
+            }
+        }
     }
+
     post {
         success {
-            echo "Pipeline exécutée avec succès pour la branche ${env.BRANCH_NAME}."
+            echo "✅ Déploiement réussi sur ${env.ENV} !"
         }
         failure {
-            echo "Échec du pipeline pour la branche ${env.BRANCH_NAME}."
+            echo "❌ Échec du pipeline sur ${env.ENV}."
         }
     }
 }
 
 
 
+
 // 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"
+//         dev_URL = "dev.foodgame.fr"
 //         PROD_URL = "prod.foodgame.fr"
 //     }
 //     stages {
@@ -111,7 +149,7 @@ pipeline {
 //                     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})"
+//                         echo "Déploiement sur dev (${dev_URL})"
 //                     } else if (env.BRANCH_NAME == 'master') {
 //                         echo "Déploiement sur PROD (${PROD_URL})"
 //                     } else {
@@ -254,7 +292,7 @@ pipeline {
 // //     }
 	
 	
-// // 	// stage("Push preprod images to nexus")
+// // 	// stage("Push dev images to nexus")
 // // 	// {
 // // 	// 	docker.withRegistry('http://localhost:8083','885ef60c-9352-489a-bd1c-e4b695747c21')
 // // 	// 	{

docker-compose.yml → docker-compose.preprod.yml