Compare commits

..

9 Commits

Author SHA1 Message Date
Van Leemput Dayron
4a6d224dbd refactor: un-nest /travelmate/policies route and remove Outlet from TravelMate component 2026-01-02 16:39:15 +01:00
Van Leemput Dayron
7e2672c262 refactor: use relative path for API messages endpoint 2025-12-15 19:22:11 +01:00
Van Leemput Dayron
5dec349259 chore: Update API endpoint port from 3000 to 4000 for message submission. 2025-12-15 19:10:56 +01:00
Van Leemput Dayron
cbbfe40d1b docs: Refine Jenkinsfile comments for improved clarity in build and deploy stages. 2025-12-15 18:57:02 +01:00
Van Leemput Dayron
e39d496ce2 feat: introduce dedicated backend build stage and deploy only compiled backend assets. 2025-12-15 18:51:03 +01:00
Van Leemput Dayron
25589ddff9 change in jenkinsfile 2025-12-15 18:33:01 +01:00
Van Leemput Dayron
35f11521f7 Add jenkinsfile 2025-12-15 18:27:14 +01:00
Van Leemput Dayron
9896dfdcec chore: remove Jenkinsfile 2025-12-15 18:26:34 +01:00
Van Leemput Dayron
539b0ad314 chore: remove comments explaining frontend deployment steps. 2025-12-15 18:22:34 +01:00
5 changed files with 73 additions and 64 deletions

68
Jenkinsfile vendored Normal file
View File

@@ -0,0 +1,68 @@
pipeline {
agent any
tools {
nodejs 'NodeJS 20'
}
environment {
FRONT_DEST = '/var/www/xeewy.be'
BACK_DEST = '/var/www/xeewy/backend'
SERVICE_NAME = 'xeewy-backend'
}
stages {
// --- FRONTEND (Rien ne change ici) ---
stage('Build Frontend') {
steps {
echo '--- Building React Frontend ---'
dir('frontend') {
sh 'npm install'
sh 'npm run build'
}
}
}
stage('Deploy Frontend') {
steps {
echo '--- Deploying Frontend ---'
sh "rm -rf ${FRONT_DEST}/*"
sh "cp -r frontend/dist/* ${FRONT_DEST}/"
}
}
// --- BACKEND (C'est ici qu'on change) ---
stage('Build Backend') {
steps {
echo '--- Building TypeScript Backend ---'
dir('backend') {
sh 'npm install'
sh 'npm run build' // Compile le TS vers JS (dossier dist/)
}
}
}
stage('Deploy Backend') {
steps {
echo '--- Deploying Backend ---'
// On copie le dossier compilé (dist) vers le serveur
sh "rm -rf ${BACK_DEST}/*"
sh "cp backend/package.json ${BACK_DEST}/"
sh "cp backend/package-lock.json ${BACK_DEST}/"
// Copie du dossier dist (le résultat de la compilation)
sh "cp -r backend/dist ${BACK_DEST}/"
// Installation des dépendances de prod uniquement
sh "cd ${BACK_DEST} && npm install --production"
}
}
stage('Restart Service') {
steps {
echo '--- Restarting Service ---'
sh "sudo systemctl restart ${SERVICE_NAME}"
}
}
}
}

View File

@@ -60,9 +60,8 @@ function AppContent() {
<main style={{ flex: 1 }}> <main style={{ flex: 1 }}>
<Routes> <Routes>
<Route path="/" element={<Home />} /> <Route path="/" element={<Home />} />
<Route path="/travelmate" element={<TravelMate />} > <Route path="/travelmate" element={<TravelMate />} />
<Route path="policies" element={<Policies />} /> <Route path="/travelmate/policies" element={<Policies />} />
</Route>
<Route path="/travelmate/erasedata" element={<EraseData />} /> <Route path="/travelmate/erasedata" element={<EraseData />} />
<Route path="/policies" element={<Policies />} /> <Route path="/policies" element={<Policies />} />
</Routes> </Routes>

View File

@@ -1,7 +1,7 @@
import { useEffect } from 'react'; import { useEffect } from 'react';
import { motion } from 'framer-motion'; import { motion } from 'framer-motion';
import { useLanguage } from '../contexts/LanguageContext'; import { useLanguage } from '../contexts/LanguageContext';
import { Link, Outlet } from 'react-router-dom'; import { Link } from 'react-router-dom';
import { Shield, Smartphone, Map, DollarSign, Users, Globe, Code } from 'lucide-react'; import { Shield, Smartphone, Map, DollarSign, Users, Globe, Code } from 'lucide-react';
import appIcon from '../assets/app_icon.png'; import appIcon from '../assets/app_icon.png';
@@ -280,7 +280,7 @@ const TravelMate = () => {
</motion.div> </motion.div>
</motion.div> </motion.div>
<Outlet />
</div> </div>
</div> </div>
); );

View File

@@ -27,7 +27,7 @@ const EraseData = () => {
try { try {
// Using absolute URL for localhost dev, in prod simple /api might work if proxied or configured // Using absolute URL for localhost dev, in prod simple /api might work if proxied or configured
// Assuming localhost:3000 for backend based on previous steps // Assuming localhost:3000 for backend based on previous steps
await axios.post('http://localhost:3000/api/messages', { await axios.post('/api/messages', {
nom: formData.nom, nom: formData.nom,
prenom: formData.prenom, prenom: formData.prenom,
email: formData.email, email: formData.email,

View File

@@ -1,58 +0,0 @@
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 {
stage('Build Frontend') {
steps {
echo '--- Building React Frontend ---'
dir('frontend') {
sh 'npm install'
sh 'npm run build'
}
}
}
stage('Deploy Frontend') {
steps {
echo '--- Deploying Frontend to Apache folder ---'
// On vide le dossier cible (sauf s'il est vide) et on copie le build
// Note : Adaptez 'build' en 'dist' si vous utilisez ViteJS
sh "rm -rf ${FRONT_DEST}/*"
sh "cp -r frontend/build/* ${FRONT_DEST}/"
}
}
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}/"
dir("${BACK_DEST}") {
sh 'npm install --production'
}
}
}
stage('Restart Service') {
steps {
echo '--- Restarting Node.js Service ---'
// Nécessite la règle sudo NOPASSWD configurée précédemment
sh "sudo systemctl restart ${SERVICE_NAME}"
}
}
}
}