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 """ } } } } }