pipeline { agent any environment { DOCKER_HOST = "unix:///var/run/docker.sock" APP_VERSION = "${env.BRANCH_NAME}-${env.BUILD_NUMBER}" } stages { stage('Build') { steps { // Get Caddy version sh "cp .env.dist .env" // Push portfolio version sh "echo '\nPORTFOLIO_VERSION=${env.APP_VERSION}' >> .env" echo "Building new portfolio version..." sh "docker compose build" } } stage('Lighthouse Audit') { steps { // Temporary container to get data in /dist folder // Reuse of just build portfolio image sh "mkdir -p ./dist-audit ./.lighthouseci" sh "docker create --name audit-tmp portfolio:${env.APP_VERSION}" sh "docker cp audit-tmp:/usr/share/caddy/. ./dist-audit" sh "docker rm audit-tmp" // Add audit config in the same folder sh "cp .lighthouserc.cjs ./dist-audit/audit-config.cjs" // Launch special service in docker compose sh "docker compose --profile audit run --rm lighthouse-audit" } } stage('Deploy') { // Deploy only master branch when { branch 'master' } steps { echo "Deploy new portfolio version..." sh "docker compose up -d" // Update caddy-reverse-proxy cache sh "docker exec caddy-reverse-proxy caddy reload --config /etc/caddy/Caddyfile" // Keep updated docker-compose.yml and Caddyfile for safety sh "cp docker-compose.yml /backup-portfolio/docker-compose.yml" sh "docker cp portfolio:/etc/caddy/Caddyfile /backup-portfolio/Caddyfile" } } } post { always { echo "Publish Lighthouse audit..." publishHTML([ allowMissing: true, alwaysLinkToLastBuild: true, keepAll: false, reportDir: '.lighthouseci', reportFiles: 'index.html', reportName: 'Lighthouse Report' ]) echo "Clean unused image and files..." sh "docker image prune -f" sh "rm -rf ./dist-audit" } success { echo "Success !" } failure { echo "Failed." } } }