feat: introduce dedicated backend build stage and deploy only compiled backend assets.
This commit is contained in:
39
Jenkinsfile
vendored
39
Jenkinsfile
vendored
@@ -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}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user