diff --git a/Jenkinsfile b/Jenkinsfile index a7be0b0..4a917f1 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,19 +1,15 @@ pipeline { - agent { - docker { - image 'node:20' - args '-v /var/run/docker.sock:/var/run/docker.sock' - } - } + agent any environment { - APP_NAME = "the-tip-top-frontend" - REGISTRY = "registry.wk-archi-o24a-15m-g3.fr" - IMAGE = "${REGISTRY}/${APP_NAME}:${BUILD_NUMBER}" - DEPLOY_PATH = "/srv/devops/the-tip-top" + REGISTRY_URL = 'registry.wk-archi-o24a-15m-g3.fr' + IMAGE_NAME = 'the-tip-top-frontend' + DEPLOY_PATH = '/srv/devops/the-tip-top' + DEPLOY_HOST = 'https://dsp5-archi-o24a-15m-g3.fr' } stages { + stage('Checkout') { steps { echo "📦 Récupération du code source depuis Gitea..." @@ -30,7 +26,7 @@ pipeline { stage('Build Next.js') { steps { - echo "⚙️ Build de l’application Next.js (production)..." + echo "⚙️ Compilation de l’application Next.js (production)..." sh 'npm run build' } } @@ -38,18 +34,22 @@ pipeline { stage('Build Docker image') { steps { echo "🐳 Construction de l’image Docker frontend..." - sh 'docker build -t ${IMAGE} .' + sh """ + docker build -t ${REGISTRY_URL}/${IMAGE_NAME}:${BUILD_NUMBER} . + docker tag ${REGISTRY_URL}/${IMAGE_NAME}:${BUILD_NUMBER} ${REGISTRY_URL}/${IMAGE_NAME}:latest + """ } } stage('Push to Registry') { steps { - echo "📤 Envoi de l’image vers le registry privé..." - withCredentials([usernamePassword(credentialsId: 'registry-creds', usernameVariable: 'USER', passwordVariable: 'PASS')]) { - sh 'echo $PASS | docker login $REGISTRY -u $USER --password-stdin' - sh 'docker push ${IMAGE}' - sh 'docker tag ${IMAGE} ${REGISTRY}/${APP_NAME}:latest' - sh 'docker push ${REGISTRY}/${APP_NAME}:latest' + echo "📤 Envoi de l’image vers le registre privé..." + withCredentials([usernamePassword(credentialsId: 'registry-credentials', usernameVariable: 'USER', passwordVariable: 'PASS')]) { + sh """ + echo "$PASS" | docker login ${REGISTRY_URL} -u "$USER" --password-stdin + docker push ${REGISTRY_URL}/${IMAGE_NAME}:${BUILD_NUMBER} + docker push ${REGISTRY_URL}/${IMAGE_NAME}:latest + """ } } } @@ -59,8 +59,7 @@ pipeline { echo "🚀 Déploiement du frontend via Docker Compose..." sh """ cd ${DEPLOY_PATH} - docker compose pull frontend || true - docker compose rm -sf frontend || true + docker compose pull frontend # récupère la dernière image 'latest' docker compose up -d --no-deps --force-recreate frontend """ } @@ -71,20 +70,16 @@ pipeline { echo "🩺 Vérification de la disponibilité du frontend..." script { def success = false - for (int i = 1; i <= 5; i++) { + for (int i = 1; i <= 3; i++) { echo "⏳ Tentative #${i} (attente ${i * 10}s)..." sh "sleep ${i * 10}" - - // ✅ Test via Jenkins lui-même (pas le conteneur node) - def code = sh(script: "docker exec jenkins curl --insecure -s -o /dev/null -w '%{http_code}' https://dsp5-archi-o24a-15m-g3.fr", returnStdout: true).trim() - echo "Réponse HTTP : ${code}" - + def code = sh(script: "curl -k -s -o /dev/null -w '%{http_code}' ${DEPLOY_HOST} || echo 000", returnStdout: true).trim() + echo "➡️ Réponse HTTP : ${code}" if (code == '200' || code == '301' || code == '302') { success = true break } } - if (!success) { error("❌ Le frontend ne répond pas après plusieurs tentatives.") } @@ -95,7 +90,7 @@ pipeline { post { success { - echo "✅ Déploiement du frontend réussi !" + echo "✅ Déploiement réussi du frontend !" } failure { echo "❌ Échec du pipeline frontend."