Update jenkinsfile

This commit is contained in:
2025-12-05 12:56:15 +00:00
parent 2803e910bd
commit 52d17e5ad8

View File

@@ -1,72 +1,114 @@
pipeline { pipeline {
agent any agent none
tools {
maven 'mvn'
nodejs 'npm'
}
environment { environment {
JAVA_HOME = '/opt/java/openjdk' REGISTRY = 'registry.vincent-guillet.fr'
PATH = "${JAVA_HOME}/bin:${env.PATH}" API_IMAGE_DEV = "${REGISTRY}/gameovergne-api:dev-latest"
SPRING_IMAGE_NAME = 'spring-jenkins' CLIENT_IMAGE_DEV= "${REGISTRY}/gameovergne-client:dev-latest"
ANGULAR_IMAGE_NAME = 'angular-jenkins' API_IMAGE_PROD = "${REGISTRY}/gameovergne-api:prod-latest"
IMAGE_TAG = 'latest' CLIENT_IMAGE_PROD = "${REGISTRY}/gameovergne-client:prod-latest"
COMPOSE_PROJECT = 'gameovergne-app' COMPOSE_PROJECT = 'gameovergne-app'
} }
stages { stages {
stage('Checkout sur la branche dev') {
steps {
git branch: 'dev', url: 'https://gitea.vincent-guillet.fr/vincentguillet/gameovergne-app.git'
}
}
stage('Maven Build') { // Build & push images (toujours sur ct-home-dev)
stage('Build & Push Docker Images') {
agent { label 'ct-home-dev' }
steps { steps {
// Multi-branch friendly : Jenkins fait le checkout de la branche courante
checkout scm
script {
// Choix des tags selon la branche
if (env.BRANCH_NAME == 'main') {
env.API_IMAGE = API_IMAGE_PROD
env.CLIENT_IMAGE = CLIENT_IMAGE_PROD
} else {
env.API_IMAGE = API_IMAGE_DEV
env.CLIENT_IMAGE = CLIENT_IMAGE_DEV
}
}
// ----- Build API -----
dir('api') { dir('api') {
sh 'mvn clean package -DskipTests' sh """
echo "=== Build image API ${API_IMAGE} ==="
docker build -t ${API_IMAGE} .
"""
} }
}
}
stage('Angular Build') { // ----- Build Client -----
steps {
dir('client') { dir('client') {
sh 'npm install' sh """
sh 'npm run build' echo "=== Build image CLIENT ${CLIENT_IMAGE} ==="
docker build -t ${CLIENT_IMAGE} .
"""
} }
// ----- Push vers registry -----
// Si tu as des credentials, tu peux les utiliser ici via withCredentials
sh """
echo "=== Push images vers ${REGISTRY} ==="
docker push ${API_IMAGE}
docker push ${CLIENT_IMAGE}
"""
} }
} }
stage('Spring Docker Build') { // Déploiement DEV (ct-home-dev, branche dev)
steps { stage('Deploy DEV') {
sh 'docker build -t registry.vincent-guillet.fr/gameovergne-api:dev-latest ./api' when {
branch 'dev'
} }
} agent { label 'ct-home-dev' }
stage('Angular Docker Build') {
steps { steps {
sh 'docker build -t registry.vincent-guillet.fr/gameovergne-client:dev-latest ./client' checkout scm
}
}
stage('Deployment') {
steps {
withEnv([ withEnv([
"DOCKER_HOST=unix:///var/run/docker.sock", "DOCKER_HOST=unix:///var/run/docker.sock",
"COMPOSE_PROJECT_NAME=${env.COMPOSE_PROJECT}" "COMPOSE_PROJECT_NAME=${env.COMPOSE_PROJECT}"
]) { ]) {
sh ''' sh """
echo "=== Nettoyage des anciens conteneurs nommés ===" echo "=== [DEV] Nettoyage anciens conteneurs ==="
docker rm -f gameovergne-api gameovergne-client 2>/dev/null || true docker rm -f gameovergne-api gameovergne-client 2>/dev/null || true
echo "=== docker-compose down sur le projet courant ===" echo "=== [DEV] docker-compose down ==="
docker-compose down -v || true docker-compose -f docker-compose.dev.yml down -v || true
echo "=== (Re)création de la stack MySQL + Spring + Angular ===" echo "=== [DEV] docker-compose up ==="
docker-compose up -d mysql spring angular docker-compose -f docker-compose.dev.yml up -d mysql spring angular
''' """
}
}
}
// Déploiement PROD (ct-home-projets, branche main)
stage('Deploy PROD') {
when {
branch 'main'
}
agent { label 'ct-home-projets' }
steps {
checkout scm
withEnv([
"DOCKER_HOST=unix:///var/run/docker.sock",
"COMPOSE_PROJECT_NAME=${env.COMPOSE_PROJECT}"
]) {
sh """
echo "=== [PROD] Nettoyage anciens conteneurs ==="
docker rm -f gameovergne-api-prod gameovergne-client-prod 2>/dev/null || true
echo "=== [PROD] docker-compose down ==="
docker-compose -f docker-compose.prod.yml down -v || true
echo "=== [PROD] docker-compose up ==="
docker-compose -f docker-compose.prod.yml up -d mysql spring angular
"""
} }
} }
} }