diff --git a/Jenkinsfile b/Jenkinsfile index 51817e7..6db2fd7 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,19 +1,18 @@ pipeline { agent any - // Assurez-vous d'avoir configuré l'outil "NodeJS 20" dans Jenkins (Global Tool Configuration) tools { nodejs 'NodeJS 20' } environment { - // Variables pour éviter de répéter les chemins FRONT_DEST = '/var/www/xeewy.be' BACK_DEST = '/var/www/xeewy/backend' SERVICE_NAME = 'xeewy-backend' } stages { + // --- FRONTEND (Pas de changement ici, ça marche déjà) --- stage('Build Frontend') { steps { echo '--- Building React Frontend ---' @@ -26,31 +25,45 @@ pipeline { stage('Deploy Frontend') { steps { - echo '--- Deploying Frontend to Apache folder ---' + echo '--- Deploying Frontend ---' sh "rm -rf ${FRONT_DEST}/*" - - // --- CORRECTION ICI : remplacez 'build' par 'dist' --- sh "cp -r frontend/dist/* ${FRONT_DEST}/" } } + // --- BACKEND (C'est ici qu'on change tout) --- + stage('Build Backend') { + steps { + echo '--- Building TypeScript Backend ---' + dir('backend') { + // 1. On installe TOUT (y compris TypeScript pour pouvoir compiler) + sh 'npm install' + // 2. On compile le TS en JS (crée un dossier dist/) + sh 'npm run build' + } + } + } + stage('Deploy Backend') { steps { echo '--- Deploying Backend Code ---' - // On copie le code backend vers sa destination - // On exclut node_modules pour éviter de copier des milliers de fichiers inutilement - sh "rsync -av --exclude='node_modules' backend/ ${BACK_DEST}/" + // On copie le résultat du build (dist) + package.json pour la prod + // On vide le dossier distant avant pour être propre + sh "rm -rf ${BACK_DEST}/*" - dir("${BACK_DEST}") { - sh 'npm install --production' - } + sh "cp backend/package.json ${BACK_DEST}/" + sh "cp backend/package-lock.json ${BACK_DEST}/" + sh "cp -r backend/dist ${BACK_DEST}/" + // Note: Si votre build crée un dossier 'build' au lieu de 'dist', changez la ligne ci-dessus + + // On installe seulement les dépendances de prod sur le serveur + sh "cd ${BACK_DEST} && npm install --production" } } stage('Restart Service') { steps { - echo '--- Restarting Node.js Service ---' - // Nécessite la règle sudo NOPASSWD configurée précédemment + echo '--- Restarting Service ---' sh "sudo systemctl restart ${SERVICE_NAME}" } }