pipeline { agent any environment { DOCKER_HOST = "unix:///run/user/1001/docker.sock" APP_VERSION = "${env.BRANCH_NAME}-${env.BUILD_NUMBER}" DOCKER_CONFIG = "${env.WORKSPACE}/.docker" } 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 { // Create volumes but no run with safety sh "docker rm -f audit-tmp lighthouse-audit || true" sh "docker compose --profile audit create --no-build --remove-orphans lighthouse-audit" // Extract astro data from temp container to tmp-dist folder sh "docker create --name audit-tmp portfolio:${env.APP_VERSION}" sh "mkdir -p ./tmp-dist" sh "docker cp audit-tmp:/usr/share/caddy/. ./tmp-dist" sh "docker rm -f audit-tmp" // Inject data from tmp-dist and config to audit container sh "docker cp ./tmp-dist/. lighthouse-audit:/app/dist/" sh "docker cp .lighthouserc.cjs lighthouse-audit:/app/dist/audit-config.cjs" sh "rm -rf ./tmp-dist" // Now run sh "docker start -a lighthouse-audit" // Get reports sh "mkdir -p ./.lighthouseci" sh "docker cp lighthouse-audit:/app/.lighthouseci/. ./.lighthouseci/" // Clean sh "docker rm -f 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" // Safety sh "rm -f /backup-portfolio/docker-compose.yml" sh "rm -f /backup-portfolio/Caddyfile" // Copy 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: '*.html', reportName: 'Lighthouse Report' ]) echo "Clean unused image" sh "docker image prune -f" } success { echo "Success !" } failure { echo "Failed." } } }