pipeline { agent any triggers { GenericTrigger( causeString: 'Triggered on tag push', token: 'tag-trigger-secret', printContributedVariables: true, printPostContent: true, regexpFilterExpression: 'ref=refs/tags/.*', regexpFilterText: '$ref' ) } environment { REGISTRY = 'codeberg.org' IMAGE_NAME = "${REGISTRY}/lvl0/incr" DOCKER_CREDENTIALS_ID = 'codeberg-registry' } stages { stage('Tag Check') { steps { script { def isTag = sh(script: 'git describe --tags --exact-match || echo "nope"', returnStdout: true).trim() if (isTag == "nope") { echo "Not a tag. Skipping build." currentBuild.result = 'NOT_BUILT' return } } } } stage('Build & Push Docker Image') { when { expression { return env.GIT_COMMIT && env.GIT_COMMIT != "" } } steps { sh 'docker build -t $IMAGE_NAME:$GIT_COMMIT -f docker/Dockerfile .' withCredentials([usernamePassword(credentialsId: "$DOCKER_CREDENTIALS_ID", usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { sh """ echo "$PASSWORD" | docker login $REGISTRY -u "$USERNAME" --password-stdin docker push $IMAGE_NAME:$GIT_COMMIT """ } } } } }