Ver código fonte

stage backup avec mongodump

DESKTOP-SMCIPAV\falko 4 meses atrás
pai
commit
f1c32f2cd7
1 arquivos alterados com 78 adições e 94 exclusões
  1. 78 94
      Jenkinsfile

+ 78 - 94
Jenkinsfile

@@ -134,114 +134,98 @@ pipeline {
 
         // 6. Lancement des backups après déploiement
        // 6. Lancement des backups après déploiement
-        stage('Backup') {
-            steps {
-                script {
-                    echo "🚀 Lancement du backup sur le container ${env.BACKUP_CONTAINER}"
+        // 6. Lancement des backups après déploiement
+stage('Backup') {
+    steps {
+        script {
+            echo "🚀 Lancement du backup sur le container ${env.BACKUP_CONTAINER}"
+            
+            try {
+                // Vérifier que le conteneur backup existe
+                def containerExists = sh(
+                    script: "docker ps -a --filter name=${env.BACKUP_CONTAINER} --format '{{.Names}}'",
+                    returnStdout: true
+                ).trim()
+                
+                if (!containerExists) {
+                    echo "⚠️  Container ${env.BACKUP_CONTAINER} n'existe pas, lancement du service..."
+                    sh "docker-compose -f ${env.COMPOSE_FILE} up -d mongodb-backup-${env.ENV}"
+                    sleep(30)
+                }
+                
+                // Vérifier que le conteneur est en cours d'exécution
+                def containerStatus = sh(
+                    script: "docker ps --filter name=${env.BACKUP_CONTAINER} --format '{{.Status}}'",
+                    returnStdout: true
+                ).trim()
+                
+                if (containerStatus.contains('Up')) {
+                    echo "✅ Container ${env.BACKUP_CONTAINER} est actif"
+                    echo "⏳ Vérification de la connectivité MongoDB..."
+                    sleep(10)
                     
-                    try {
-                        // Vérifier que le conteneur backup existe
-                        def containerExists = sh(
-                            script: "docker ps -a --filter name=${env.BACKUP_CONTAINER} --format '{{.Names}}'",
-                            returnStdout: true
-                        ).trim()
-                        
-                        if (!containerExists) {
-                            echo "⚠️  Container ${env.BACKUP_CONTAINER} n'existe pas, lancement du service..."
-                            sh "docker-compose -f ${env.COMPOSE_FILE} up -d mongodb-backup-${env.ENV}"
-                            sleep(30) // Attendre que le service soit prêt
-                        }
-                        
-                        // Vérifier que le conteneur est en cours d'exécution
-                        def containerStatus = sh(
-                            script: "docker ps --filter name=${env.BACKUP_CONTAINER} --format '{{.Status}}'",
+                    // Déclenchement du backup manuel via mongodump
+                    echo "💾 Déclenchement du backup manuel..."
+                    def backupExitCode = sh(
+                        script: """
+                            docker exec ${env.BACKUP_CONTAINER} sh -c "
+                                mkdir -p /backup/$(date +%Y-%m-%d_%H-%M-%S) &&
+                                mongodump --host=${env.MONGO_HOST} --port=${env.MONGO_PORT} --archive=/backup/$(date +%Y-%m-%d_%H-%M-%S)/dump.archive.gz --gzip
+                            "
+                        """,
+                        returnStatus: true
+                    )
+                    
+                    if (backupExitCode == 0) {
+                        def backupFiles = sh(
+                            script: "docker exec ${env.BACKUP_CONTAINER} find /backup -name '*.gz' -type f -mtime -1 | head -5",
                             returnStdout: true
                         ).trim()
                         
-                        if (containerStatus.contains('Up')) {
-                            echo "✅ Container ${env.BACKUP_CONTAINER} est actif"
-                            
-                            // Attendre un peu que MongoDB soit prêt si le conteneur vient d'être démarré
-                            echo "⏳ Vérification de la connectivité MongoDB..."
-                            sleep(10)
-                            
-                            // Déclencher le backup manuel avec tiredofit/mongodb-backup
-                            echo "💾 Déclenchement du backup manuel..."
-                            def backupExitCode = sh(
-                                script: "docker exec ${env.BACKUP_CONTAINER} /usr/sbin/backup-now",
-                                returnStatus: true
-                            )
-                            
-                            if (backupExitCode == 0) {
-                                // Vérifier les fichiers de backup créés
-                                def backupFiles = sh(
-                                    script: "docker exec ${env.BACKUP_CONTAINER} find /backup -name '*.gz' -type f -mtime -1 | head -5",
-                                    returnStdout: true
-                                ).trim()
-                                
-                                if (backupFiles) {
-                                    echo "✅ Backup ${env.ENV.toUpperCase()} réussi !"
-                                    echo "📁 Fichiers de backup récents :"
-                                    backupFiles.split('\n').each { file ->
-                                        if (file.trim()) {
-                                            def fileInfo = sh(
-                                                script: "docker exec ${env.BACKUP_CONTAINER} ls -lh '${file.trim()}'",
-                                                returnStdout: true
-                                            ).trim()
-                                            echo "   ${fileInfo}"
-                                        }
-                                    }
-                                } else {
-                                    echo "⚠️  Aucun fichier de backup récent trouvé"
+                        if (backupFiles) {
+                            echo "✅ Backup ${env.ENV.toUpperCase()} réussi !"
+                            echo "📁 Fichiers de backup récents :"
+                            backupFiles.split('\n').each { file ->
+                                if (file.trim()) {
+                                    def fileInfo = sh(
+                                        script: "docker exec ${env.BACKUP_CONTAINER} ls -lh '${file.trim()}'",
+                                        returnStdout: true
+                                    ).trim()
+                                    echo "   ${fileInfo}"
                                 }
-                                
-                            } else {
-                                echo "❌ Le processus de backup a retourné un code d'erreur : ${backupExitCode}"
-                                
-                                // Afficher les logs pour diagnostic
-                                def containerLogs = sh(
-                                    script: "docker logs --tail 20 ${env.BACKUP_CONTAINER} 2>&1 || echo 'Impossible de récupérer les logs'",
-                                    returnStdout: true
-                                )
-                                echo "📋 Logs du conteneur backup :"
-                                echo "${containerLogs}"
-                                
-                                // Marquer comme unstable mais ne pas faire échouer le pipeline
-                                currentBuild.result = 'UNSTABLE'
-                                echo "⚠️  Backup échoué mais le déploiement continue"
                             }
-                            
                         } else {
-                            echo "❌ Container ${env.BACKUP_CONTAINER} n'est pas actif"
-                            echo "🔄 Tentative de redémarrage du service..."
-                            
-                            sh """
-                                docker-compose -f ${env.COMPOSE_FILE} restart mongodb-backup-${env.ENV} || true
-                                sleep 30
-                            """
-                            
-                            // Nouvelle tentative après redémarrage
-                            def retryExitCode = sh(
-                                script: "docker exec ${env.BACKUP_CONTAINER} /usr/sbin/backup-now",
-                                returnStatus: true
-                            )
-                            
-                            if (retryExitCode == 0) {
-                                echo "✅ Backup ${env.ENV.toUpperCase()} réussi après redémarrage"
-                            } else {
-                                echo "❌ Backup ${env.ENV.toUpperCase()} échoué même après redémarrage"
-                                currentBuild.result = 'UNSTABLE'
-                            }
+                            echo "⚠️  Aucun fichier de backup récent trouvé"
                         }
                         
-                    } catch (Exception e) {
-                        echo "❌ Erreur lors du backup: ${e.getMessage()}"
-                        echo "⚠️  Le backup a échoué mais le déploiement continue"
+                    } else {
+                        echo "❌ Le processus de backup a retourné un code d'erreur : ${backupExitCode}"
+                        def containerLogs = sh(
+                            script: "docker logs --tail 20 ${env.BACKUP_CONTAINER} 2>&1 || echo 'Impossible de récupérer les logs'",
+                            returnStdout: true
+                        )
+                        echo "📋 Logs du conteneur backup :"
+                        echo "${containerLogs}"
                         currentBuild.result = 'UNSTABLE'
                     }
+                    
+                } else {
+                    echo "❌ Container ${env.BACKUP_CONTAINER} n'est pas actif"
+                    echo "🔄 Tentative de redémarrage du service..."
+                    sh """
+                        docker-compose -f ${env.COMPOSE_FILE} restart mongodb-backup-${env.ENV} || true
+                        sleep 30
+                    """
                 }
+                
+            } catch (Exception e) {
+                echo "❌ Erreur lors du backup: ${e.getMessage()}"
+                echo "⚠️  Le backup a échoué mais le déploiement continue"
+                currentBuild.result = 'UNSTABLE'
             }
         }
+    }
+}
 
         // 7. Push optionnel de l'image dans le registre Nexus
         // stage('Push to Private Registry') {