ci: publish Docker images and deploy development environment

This commit is contained in:
2026-08-04 13:58:08 +00:00
parent 4b04bf48e9
commit 95aae8a63a
3 changed files with 150 additions and 13 deletions

87
Jenkinsfile vendored
View File

@@ -10,7 +10,14 @@ pipeline {
environment {
CI_NETWORK = "tiptop-ci-${BUILD_NUMBER}"
CI_DATABASE = "tiptop-ci-db-${BUILD_NUMBER}"
DATABASE_URL = "postgresql://tiptop_ci:tiptop_ci_password@${CI_DATABASE}:5432/the_tip_top_ci"
REGISTRY = "localhost:5000"
IMAGE_TAG = "${BUILD_NUMBER}"
BACKEND_IMAGE = "${REGISTRY}/the-tip-top/backend"
FRONTEND_IMAGE = "${REGISTRY}/the-tip-top/frontend"
}
stages {
@@ -23,15 +30,14 @@ pipeline {
stage('Vérification du workspace') {
steps {
sh '''
echo "Workspace Jenkins : ${WORKSPACE}"
ls -lah backend
ls -lah frontend
test -f backend/package.json
test -f backend/package-lock.json
test -f frontend/package.json
test -f frontend/package-lock.json
test -f deploy/dev/docker-compose.yml
echo "Commit : ${GIT_COMMIT}"
echo "Tag Docker : ${IMAGE_TAG}"
'''
}
}
@@ -59,7 +65,6 @@ pipeline {
fi
if [ "$i" -eq 30 ]; then
echo "PostgreSQL ne répond pas."
docker logs "${CI_DATABASE}"
exit 1
fi
@@ -72,6 +77,7 @@ pipeline {
--volumes-from furious-jenkins \
--user "$(id -u):$(id -g)" \
-e HOME=/tmp \
-e NPM_CONFIG_CACHE=/tmp/.npm \
-e DATABASE_URL="${DATABASE_URL}" \
-e JWT_SECRET=jenkins_ci_secret \
-e NODE_ENV=test \
@@ -87,13 +93,14 @@ pipeline {
}
}
stage('Frontend - Lint and Build') {
stage('Frontend - Lint et Build') {
steps {
sh '''
docker run --rm \
--volumes-from furious-jenkins \
--user "$(id -u):$(id -g)" \
-e HOME=/tmp \
-e NPM_CONFIG_CACHE=/tmp/.npm \
-w "${WORKSPACE}/frontend" \
node:22-alpine \
sh -c "
@@ -105,12 +112,68 @@ pipeline {
}
}
stage('Docker Build') {
stage('Construction des images Docker') {
steps {
sh '''
docker build \
-t "${BACKEND_IMAGE}:${IMAGE_TAG}" \
-t "${BACKEND_IMAGE}:latest" \
backend
docker build \
--build-arg VITE_API_URL=http://192.168.1.23:5001 \
-t "${FRONTEND_IMAGE}:${IMAGE_TAG}" \
-t "${FRONTEND_IMAGE}:latest" \
frontend
'''
}
}
stage('Publication dans le Registry') {
steps {
sh '''
docker push "${BACKEND_IMAGE}:${IMAGE_TAG}"
docker push "${BACKEND_IMAGE}:latest"
docker push "${FRONTEND_IMAGE}:${IMAGE_TAG}"
docker push "${FRONTEND_IMAGE}:latest"
'''
}
}
stage('Déploiement DEV') {
steps {
sh '''
REGISTRY="${REGISTRY}" \
IMAGE_TAG="${IMAGE_TAG}" \
docker compose \
-f docker-compose.dev.yml \
build
-p tiptop-dev \
-f deploy/dev/docker-compose.yml \
up -d \
--pull always \
--remove-orphans
echo "Attente du backend DEV..."
for i in $(seq 1 30); do
if curl -fsS http://localhost:5001/ >/dev/null; then
echo "Backend DEV opérationnel."
break
fi
if [ "$i" -eq 30 ]; then
docker compose \
-p tiptop-dev \
-f deploy/dev/docker-compose.yml \
logs --tail=100
exit 1
fi
sleep 5
done
curl -fsS http://localhost:5173/ >/dev/null
echo "Frontend DEV opérationnel."
'''
}
}
@@ -125,11 +188,11 @@ pipeline {
}
success {
echo 'Pipeline CI réussi.'
echo "Pipeline CI/CD réussi. Version DEV déployée : ${IMAGE_TAG}"
}
failure {
echo 'Pipeline CI en échec. Consulte la Console Output.'
echo "Pipeline CI/CD en échec. Consulte la Console Output."
}
}
}