|
|
@@ -11,6 +11,8 @@ pipeline {
|
|
|
}
|
|
|
|
|
|
stages {
|
|
|
+
|
|
|
+ // 1. Déterminer l'environnement en fonction de la branche
|
|
|
stage('Select Environment') {
|
|
|
steps {
|
|
|
script {
|
|
|
@@ -37,15 +39,25 @@ pipeline {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // stage('Install Dependencies & Test') {
|
|
|
- // steps {
|
|
|
- // withEnv(["PATH=${tool 'NodeJS'}/bin:${env.PATH}"]) {
|
|
|
- // sh 'npm install --legacy-peer-deps'
|
|
|
- // sh 'npm run test -- --no-watch --no-progress --browsers=ChromeHeadless'
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
+ // 2. Installation des dépendances et tests unitaires Angular
|
|
|
+ stage('Unit Tests') {
|
|
|
+ steps {
|
|
|
+ dir('angular-client') {
|
|
|
+ sh 'npm install --legacy-peer-deps'
|
|
|
+ sh 'npm run test -- --no-watch --no-progress --browsers=ChromeHeadless --code-coverage'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ post {
|
|
|
+ always {
|
|
|
+ junit 'angular-client/coverage/**/junit-report.xml'
|
|
|
+ }
|
|
|
+ unsuccessful {
|
|
|
+ error "Tests unitaires échoués. Arrêt du pipeline."
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ // 3. Analyse SonarQube pour la qualité du code
|
|
|
// stage('SonarQube Analysis') {
|
|
|
// steps {
|
|
|
// script {
|
|
|
@@ -63,31 +75,38 @@ pipeline {
|
|
|
// }
|
|
|
// }
|
|
|
|
|
|
+ // 4. Arrêt et nettoyage des anciens conteneurs
|
|
|
// 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
|
|
|
// """
|
|
|
// }
|
|
|
// }
|
|
|
|
|
|
+ // 5. Build et déploiement des services
|
|
|
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
|
|
|
"""
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 6. Lancement des backups après déploiement
|
|
|
+ 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
|
|
|
+ sh "docker exec ${env.BACKUP_CONTAINER} /backup.sh || echo '⚠️ Backup ${env.ENV.toUpperCase()} échoué'"
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // stage('Push to Private Registry (Optional)') {
|
|
|
+ // 7. Push optionnel de l'image dans le registre Nexus
|
|
|
+ // stage('Push to Private Registry') {
|
|
|
// when {
|
|
|
// anyOf {
|
|
|
// branch 'dev'
|
|
|
@@ -97,17 +116,11 @@ pipeline {
|
|
|
// 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}
|
|
|
- // """
|
|
|
- // }
|
|
|
+ // sh """
|
|
|
+ // docker pull ${IMAGE_NAME}:${IMAGE_TAG} || true
|
|
|
+ // docker tag ${IMAGE_NAME}:${IMAGE_TAG} ${DOCKER_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}
|
|
|
+ // docker push ${DOCKER_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}
|
|
|
+ // """
|
|
|
// }
|
|
|
// }
|
|
|
// }
|
|
|
@@ -125,8 +138,6 @@ pipeline {
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
-
|
|
|
// pipeline {
|
|
|
// agent any
|
|
|
// environment {
|