feat: introduce dedicated backend build stage and deploy only compiled backend assets.

This commit is contained in:
Van Leemput Dayron
2025-12-15 18:51:03 +01:00
parent 25589ddff9
commit e39d496ce2

39
Jenkinsfile vendored
View File

@@ -1,19 +1,18 @@
pipeline { pipeline {
agent any agent any
// Assurez-vous d'avoir configuré l'outil "NodeJS 20" dans Jenkins (Global Tool Configuration)
tools { tools {
nodejs 'NodeJS 20' nodejs 'NodeJS 20'
} }
environment { environment {
// Variables pour éviter de répéter les chemins
FRONT_DEST = '/var/www/xeewy.be' FRONT_DEST = '/var/www/xeewy.be'
BACK_DEST = '/var/www/xeewy/backend' BACK_DEST = '/var/www/xeewy/backend'
SERVICE_NAME = 'xeewy-backend' SERVICE_NAME = 'xeewy-backend'
} }
stages { stages {
// --- FRONTEND (Pas de changement ici, ça marche déjà) ---
stage('Build Frontend') { stage('Build Frontend') {
steps { steps {
echo '--- Building React Frontend ---' echo '--- Building React Frontend ---'
@@ -26,31 +25,45 @@ pipeline {
stage('Deploy Frontend') { stage('Deploy Frontend') {
steps { steps {
echo '--- Deploying Frontend to Apache folder ---' echo '--- Deploying Frontend ---'
sh "rm -rf ${FRONT_DEST}/*" sh "rm -rf ${FRONT_DEST}/*"
// --- CORRECTION ICI : remplacez 'build' par 'dist' ---
sh "cp -r frontend/dist/* ${FRONT_DEST}/" 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') { stage('Deploy Backend') {
steps { steps {
echo '--- Deploying Backend Code ---' echo '--- Deploying Backend Code ---'
// On copie le code backend vers sa destination // On copie le résultat du build (dist) + package.json pour la prod
// On exclut node_modules pour éviter de copier des milliers de fichiers inutilement // On vide le dossier distant avant pour être propre
sh "rsync -av --exclude='node_modules' backend/ ${BACK_DEST}/" sh "rm -rf ${BACK_DEST}/*"
dir("${BACK_DEST}") { sh "cp backend/package.json ${BACK_DEST}/"
sh 'npm install --production' 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') { stage('Restart Service') {
steps { steps {
echo '--- Restarting Node.js Service ---' echo '--- Restarting Service ---'
// Nécessite la règle sudo NOPASSWD configurée précédemment
sh "sudo systemctl restart ${SERVICE_NAME}" sh "sudo systemctl restart ${SERVICE_NAME}"
} }
} }