116 lines
4.0 KiB
Plaintext
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
|
|
"""
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |