Mise à jour de index.js

This commit is contained in:
soufiane 2025-11-03 20:53:34 +01:00
parent 9e8009558a
commit cde50fe4f9

118
Jenkinsfile vendored
View File

@ -1,36 +1,56 @@
pipeline { pipeline {
agent any agent any
// 🔁 Vérifie automatiquement toutes les 2 minutes sil y a des commits sur Gitea // 🔁 Vérifie toutes les 2 minutes si du nouveau code a été poussé
triggers { triggers {
pollSCM('H/2 * * * *') pollSCM('H/2 * * * *')
} }
// ⚙️ Choix de lenvironnement de déploiement (par défaut : dev) // ⚙️ Paramètre manuel (fallback)
parameters { parameters {
choice( choice(
name: 'ENV', name: 'ENV',
choices: ['dev', 'preprod', 'prod'], choices: ['dev', 'preprod', 'prod'],
description: 'Choisir lenvironnement de déploiement' description: 'Choisir lenvironnement de déploiement (automatique si branche correspondante)'
) )
} }
// 🌍 Variables globales
environment { environment {
REGISTRY_URL = "registry.wk-archi-o24a-15m-g3.fr" REGISTRY_URL = "registry.wk-archi-o24a-15m-g3.fr"
IMAGE_NAME = "the-tip-top-backend" IMAGE_NAME = "the-tip-top-backend"
}
// Déduit automatiquement ENV à partir de la branche Git
ENV = sh(script: "git rev-parse --abbrev-ref HEAD", returnStdout: true).trim()
TAG = "${ENV}-latest"
DEPLOY_PATH = "/srv/devops/the-tip-top/${ENV}"
}
stages { stages {
/* ─────────────────────────────── /* ───────────────────────────────
* 1Récupération du code source * 1⃣ Init — Détection automatique de lenvironnement
* ─────────────────────────────── */ * ─────────────────────────────── */
stage('Init') {
steps {
script {
// 🔍 Détermine la branche Git courante
def currentBranch = sh(script: "git rev-parse --abbrev-ref HEAD", returnStdout: true).trim()
echo "🧭 Branche détectée : ${currentBranch}"
// 🧩 Si la branche correspond à un environnement connu, on lutilise
if (["dev", "preprod", "main"].contains(currentBranch)) {
env.ENV = (currentBranch == "main") ? "prod" : currentBranch
} else {
env.ENV = params.ENV ?: "dev"
}
// 🧱 Variables de déploiement dérivées
env.TAG = "${env.ENV}-latest"
env.DEPLOY_PATH = "/srv/devops/the-tip-top/${env.ENV}"
echo """
🌍 Environnement = ${env.ENV}
🏷️ Tag Docker = ${env.TAG}
📂 Chemin de déploiement = ${env.DEPLOY_PATH}
"""
}
}
}
stage('Checkout') { stage('Checkout') {
steps { steps {
echo "📦 Récupération du code source depuis Gitea..." echo "📦 Récupération du code source depuis Gitea..."
@ -38,9 +58,6 @@ pipeline {
} }
} }
/* ───────────────────────────────
* 2⃣ Tests de qualité et unitaires
* ─────────────────────────────── */
stage('Tests & Qualité') { stage('Tests & Qualité') {
steps { steps {
echo "🧪 Lancement des tests et analyse de code..." echo "🧪 Lancement des tests et analyse de code..."
@ -52,20 +69,6 @@ pipeline {
} }
} }
/* ───────────────────────────────
* 3⃣ Informations sur lenvironnement
* ─────────────────────────────── */
stage('Show Environment Info') {
steps {
echo "🌍 Environnement : ${params.ENV}"
echo "📦 Image : ${REGISTRY_URL}/${IMAGE_NAME}:${TAG}"
echo "📂 Dossier de déploiement : ${DEPLOY_PATH}"
}
}
/* ───────────────────────────────
* 4⃣ Construction de limage Docker
* ─────────────────────────────── */
stage('Build Docker image') { stage('Build Docker image') {
steps { steps {
echo "🐳 Construction de limage Docker backend..." echo "🐳 Construction de limage Docker backend..."
@ -76,9 +79,6 @@ pipeline {
} }
} }
/* ───────────────────────────────
* 5⃣ Envoi de limage au registre privé
* ─────────────────────────────── */
stage('Push to Registry') { stage('Push to Registry') {
steps { steps {
echo "📤 Envoi de limage vers le registre Docker privé..." echo "📤 Envoi de limage vers le registre Docker privé..."
@ -92,91 +92,65 @@ pipeline {
} }
} }
/* ───────────────────────────────
* 6⃣ Sauvegarde avant déploiement
* ─────────────────────────────── */
stage('Backup Before Deploy') { stage('Backup Before Deploy') {
steps { steps {
echo "💾 Exécution du script de sauvegarde avant déploiement..." echo "💾 Exécution du script de sauvegarde avant déploiement..."
sh ''' sh '''
if [ -f /srv/devops/the-tip-top/backup.sh ]; then if [ -f /srv/devops/the-tip-top/backup.sh ]; then
echo "▶️ Lancement du script de sauvegarde..."
bash /srv/devops/the-tip-top/backup.sh bash /srv/devops/the-tip-top/backup.sh
else else
echo "⚠️ Aucun script backup.sh trouvé, déploiement sans sauvegarde." echo "⚠️ Aucun script backup.sh trouvé."
fi fi
''' '''
} }
} }
/* ───────────────────────────────
* 7⃣ Déploiement Docker Compose
* ─────────────────────────────── */
stage('Deploy') { stage('Deploy') {
steps { steps {
echo "🚀 Déploiement du backend sur ${params.ENV}..." echo "🚀 Déploiement du backend sur ${env.ENV}..."
sh ''' sh '''
if [ ! -f "${DEPLOY_PATH}/docker-compose.yml" ]; then if [ ! -f "${DEPLOY_PATH}/docker-compose.yml" ]; then
echo "❌ Fichier docker-compose.yml introuvable dans ${DEPLOY_PATH}" echo "❌ Fichier docker-compose.yml introuvable dans ${DEPLOY_PATH}"
exit 1 exit 1
fi fi
echo "📁 Déploiement dans ${DEPLOY_PATH}..."
cd "${DEPLOY_PATH}" cd "${DEPLOY_PATH}"
echo "⬇️ Récupération de la dernière image..."
docker compose pull backend docker compose pull backend
echo "🔁 Redémarrage du conteneur backend..."
docker compose up -d --force-recreate backend docker compose up -d --force-recreate backend
''' '''
} }
} }
/* ───────────────────────────────
* 8⃣ Vérification du déploiement
* ─────────────────────────────── */
stage('Health Check') { stage('Health Check') {
steps { steps {
echo "🩺 Vérification du backend après déploiement..." echo "🩺 Vérification du backend après déploiement..."
script { script {
def domain = (params.ENV == 'dev') ? "api.dev.dsp5-archi-o24a-15m-g3.fr" : def domain = (env.ENV == 'dev') ? "api.dev.dsp5-archi-o24a-15m-g3.fr" :
(params.ENV == 'preprod') ? "api.preprod.dsp5-archi-o24a-15m-g3.fr" : (env.ENV == 'preprod') ? "api.preprod.dsp5-archi-o24a-15m-g3.fr" :
"api.dsp5-archi-o24a-15m-g3.fr" "api.dsp5-archi-o24a-15m-g3.fr"
def maxRetries = 10
def statusCode = "000" def statusCode = "000"
for (int i = 1; i <= 10; i++) {
for (int i = 1; i <= maxRetries; i++) { statusCode = sh(script: "curl -k -s -o /dev/null -w '%{http_code}' https://${domain}/health || echo 000", returnStdout: true).trim()
statusCode = sh(
script: "curl -k -s -o /dev/null -w '%{http_code}' https://${domain}/health || echo 000",
returnStdout: true
).trim()
if (statusCode in ['200', '301', '302']) { if (statusCode in ['200', '301', '302']) {
echo "✅ Backend ${params.ENV} opérationnel (HTTP ${statusCode}) après ${i} essai(s)" echo "✅ Backend ${env.ENV} opérationnel (HTTP ${statusCode})"
return return
} else {
echo "⏳ Tentative ${i}/${maxRetries} → HTTP ${statusCode}"
sleep(time: 5, unit: 'SECONDS')
} }
echo "⏳ Tentative ${i}/10 → HTTP ${statusCode}"
sleep 5
} }
error("❌ Health check échoué - code HTTP ${statusCode}")
error("❌ Health check échoué sur ${params.ENV} - code HTTP ${statusCode}")
} }
} }
} }
} }
/* ───────────────────────────────
* 🔚 Post actions
* ─────────────────────────────── */
post { post {
success { success {
echo "✅ Pipeline backend ${params.ENV} terminé avec succès !" echo "✅ Pipeline backend ${env.ENV} terminé avec succès !"
} }
failure { failure {
echo "❌ Échec du pipeline backend pour ${params.ENV}." echo "❌ Échec du pipeline backend pour ${env.ENV}."
} }
} }
} }