pipeline { agent { node { label 'mapguesser' customWorkspace 'workspace/mapguesser' } } stages { stage('Install composer') { environment { COMPOSER_HOME="${WORKSPACE}/.composer" } agent { dockerfile { filename 'docker/Dockerfile' dir '.' additionalBuildArgs '--target mapg_base' reuseNode true } } steps { sh 'composer install' } } stage('Unit Testing') { agent { dockerfile { filename 'docker/Dockerfile' dir '.' additionalBuildArgs '--target mapg_base' reuseNode true } } steps { sh 'vendor/bin/phpunit --log-junit unit_test_results.xml --testdox tests' } post { success { archiveArtifacts 'unit_test_results.xml' } } } stage('Static Code Analysis') { agent { dockerfile { filename 'docker/Dockerfile' dir '.' additionalBuildArgs '--target mapg_base' reuseNode true } } steps { sh 'php -d memory_limit=1G vendor/bin/phpstan analyse -c phpstan.neon --error-format=prettyJson > static_code_analysis_results.json' } post { success { archiveArtifacts 'static_code_analysis_results.json' } } } stage('Release Docker image') { steps { script { sh script 'git clean -ffdx', label 'Clean repository' def version = sh(script: 'git describe --tags --always --match "Release_*" HEAD', returnStdout: true).trim() def imageUrl = "git.esoko.eu/esoko/mapguesser:${version}" sh script: """docker buildx build \ -t ${imageUrl} \ -f docker/Dockerfile \ --target mapg_release \ .""", label: 'Build Docker image') withDockerRegistry([credentialsId: 'gitea-system-user', url: 'https://git.esoko.eu/']) { sh script: "docker push ${image_url}", label: 'Push Docker image to registry' } } } } } }