|
@@ -135,97 +135,88 @@ pipeline {
|
|
|
// 6. Lancement des backups après déploiement
|
|
// 6. Lancement des backups après déploiement
|
|
|
// 6. Lancement des backups après déploiement
|
|
// 6. Lancement des backups après déploiement
|
|
|
// 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}"
|
|
|
|
|
-
|
|
|
|
|
- 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)
|
|
|
|
|
-
|
|
|
|
|
- // 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
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ stage('Backup') {
|
|
|
|
|
+ steps {
|
|
|
|
|
+ script {
|
|
|
|
|
+ echo "🚀 Lancement du backup sur le container ${env.BACKUP_CONTAINER}"
|
|
|
|
|
|
|
|
- if (backupExitCode == 0) {
|
|
|
|
|
- def backupFiles = sh(
|
|
|
|
|
- script: "docker exec ${env.BACKUP_CONTAINER} find /backup -name '*.gz' -type f -mtime -1 | head -5",
|
|
|
|
|
|
|
+ try {
|
|
|
|
|
+ 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..."
|
|
|
|
|
+ sh "docker-compose -f ${env.COMPOSE_FILE} up -d mongodb-backup-${env.ENV}"
|
|
|
|
|
+ sleep(30)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ def containerStatus = sh(
|
|
|
|
|
+ script: "docker ps --filter name=${env.BACKUP_CONTAINER} --format '{{.Status}}'",
|
|
|
returnStdout: true
|
|
returnStdout: true
|
|
|
).trim()
|
|
).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}"
|
|
|
|
|
|
|
+
|
|
|
|
|
+ if (containerStatus.contains('Up')) {
|
|
|
|
|
+ echo "✅ Container ${env.BACKUP_CONTAINER} est actif"
|
|
|
|
|
+ sleep(10)
|
|
|
|
|
+
|
|
|
|
|
+ echo "💾 Déclenchement du backup manuel..."
|
|
|
|
|
+ def backupExitCode = sh(
|
|
|
|
|
+ script: """
|
|
|
|
|
+ docker exec ${env.BACKUP_CONTAINER} sh -c '
|
|
|
|
|
+ BACKUP_DIR="/backup/$(date +%Y-%m-%d_%H-%M-%S)" &&
|
|
|
|
|
+ mkdir -p "$BACKUP_DIR" &&
|
|
|
|
|
+ mongodump --host=${env.MONGO_HOST} --port=${env.MONGO_PORT} \
|
|
|
|
|
+ --archive="$BACKUP_DIR/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 (backupFiles) {
|
|
|
|
|
+ echo "✅ Backup ${env.ENV.toUpperCase()} réussi !"
|
|
|
|
|
+ echo "📁 Fichiers :"
|
|
|
|
|
+ backupFiles.split('\n').each { file ->
|
|
|
|
|
+ if (file.trim()) {
|
|
|
|
|
+ echo sh(
|
|
|
|
|
+ script: "docker exec ${env.BACKUP_CONTAINER} ls -lh '${file.trim()}'",
|
|
|
|
|
+ returnStdout: true
|
|
|
|
|
+ ).trim()
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ echo "⚠️ Aucun fichier de backup récent trouvé"
|
|
|
}
|
|
}
|
|
|
|
|
+ } else {
|
|
|
|
|
+ echo "❌ Backup échoué avec code ${backupExitCode}"
|
|
|
|
|
+ echo sh(
|
|
|
|
|
+ script: "docker logs --tail 20 ${env.BACKUP_CONTAINER} 2>&1 || true",
|
|
|
|
|
+ returnStdout: true
|
|
|
|
|
+ )
|
|
|
|
|
+ currentBuild.result = 'UNSTABLE'
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
} else {
|
|
} else {
|
|
|
- echo "⚠️ Aucun fichier de backup récent trouvé"
|
|
|
|
|
|
|
+ echo "❌ Container ${env.BACKUP_CONTAINER} inactif — tentative de redémarrage"
|
|
|
|
|
+ sh "docker-compose -f ${env.COMPOSE_FILE} restart mongodb-backup-${env.ENV} || true"
|
|
|
|
|
+ sleep(30)
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- } 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}"
|
|
|
|
|
|
|
+
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ echo "❌ Erreur lors du backup: ${e.getMessage()}"
|
|
|
currentBuild.result = 'UNSTABLE'
|
|
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
|
|
// 7. Push optionnel de l'image dans le registre Nexus
|
|
|
// stage('Push to Private Registry') {
|
|
// stage('Push to Private Registry') {
|