Files
gameovergne-app/jenkinsfile
2025-12-05 13:24:13 +00:00

116 lines
4.0 KiB
Plaintext

pipeline {
agent none
environment {
REGISTRY = 'registry.vincent-guillet.fr'
API_IMAGE_DEV = "${REGISTRY}/gameovergne-api:dev-latest"
CLIENT_IMAGE_DEV= "${REGISTRY}/gameovergne-client:dev-latest"
API_IMAGE_PROD = "${REGISTRY}/gameovergne-api:prod-latest"
CLIENT_IMAGE_PROD = "${REGISTRY}/gameovergne-client:prod-latest"
COMPOSE_PROJECT = 'gameovergne-app'
}
stages {
// Build & push images (toujours sur ct-home-dev)
stage('Build & Push Docker Images') {
agent { label 'ct-home-dev' }
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') {
sh """
echo "=== Build image API ${API_IMAGE} ==="
docker build -t ${API_IMAGE} .
"""
}
// ----- Build Client -----
dir('client') {
sh """
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}
"""
}
}
// Déploiement DEV (ct-home-dev, branche dev)
stage('Deploy DEV') {
when {
branch 'dev'
}
agent { label 'ct-home-dev' }
steps {
checkout scm
withEnv([
"DOCKER_HOST=unix:///var/run/docker.sock",
"COMPOSE_PROJECT_NAME=${env.COMPOSE_PROJECT}"
]) {
sh """
echo "=== [DEV] Nettoyage anciens conteneurs ==="
docker rm -f gameovergne-api gameovergne-client 2>/dev/null || true
echo "=== [DEV] docker compose down ==="
docker compose -f docker compose.dev.yml down -v || true
echo "=== [DEV] docker compose up ==="
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
"""
}
}
}
}
}