pipeline { agent { label 'docker' } triggers { pollSCM('H/5 * * * *') // every ~5 minutes cron('H 3 * * 0') // every week once } // 👇 Fill these for your setup environment { // Project PROJECT = 'cgit' GIT_URL = "/var/git/${PROJECT}.git" GIT_BRANCH = 'trunk' GIT_CREDENTIALS = '' // Docker REGISTRY = 'docker.it-jaros.com' PLATFORMS = 'linux/arm64/v8,linux/amd64' IMAGE_NAME = "${REGISTRY}/${PROJECT}" DOCKER_HUB = "jarlucmat/${PROJECT}" ALPINE_VERSION = 'latest' // Maven } stages { stage('Checkout') { steps { script { if (env.GIT_CREDENTIALS?.trim()) { checkout([$class: 'GitSCM', branches: [[name: "*/${GIT_BRANCH}"]], userRemoteConfigs: [[url: GIT_URL, credentialsId: GIT_CREDENTIALS]], ]) } else { git branch: GIT_BRANCH, url: GIT_URL } } } } stage('Extract vars') { steps { script { env.GIT_SHA = sh(script: "git rev-parse --short HEAD", returnStdout: true).trim() env.APP_VERSION = sh(script: "cat src/version", returnStdout: true).trim() } } } stage('Docker buildx (multi-arch)') { steps { withCredentials([ usernamePassword( credentialsId: 'docker', usernameVariable: 'DOCKER_USER', passwordVariable: 'DOCKER_PASS' ), usernamePassword( credentialsId: 'docker-hub', usernameVariable: 'DOCKER_HUB_USER', passwordVariable: 'DOCKER_HUB_PASS' ) ]) { sh ''' docker version docker buildx version docker buildx use jenkins || docker buildx create --name jenkins --driver docker-container --use docker buildx inspect --bootstrap echo "$DOCKER_PASS" | docker login $REGISTRY -u "$DOCKER_USER" --password-stdin echo "$DOCKER_HUB_PASS" | docker login -u "$DOCKER_HUB_USER" --password-stdin DOCKER_BUILDKIT=1 docker buildx build \ --platform ${PLATFORMS} \ --build-arg APP_VERSION=${APP_VERSION} \ --build-arg ALPINE_VERSION=${ALPINE_VERSION} \ -t ${IMAGE_NAME}:${GIT_SHA} \ -t ${DOCKER_HUB}:${GIT_SHA} \ -t ${IMAGE_NAME}:${APP_VERSION} \ -t ${DOCKER_HUB}:${APP_VERSION} \ -t ${IMAGE_NAME}:${APP_VERSION}-alpine${ALPINE_VERSION} \ -t ${DOCKER_HUB}:${APP_VERSION}-alpine${ALPINE_VERSION} \ -t ${IMAGE_NAME}:latest \ -t ${DOCKER_HUB}:latest \ --push \ . ''' } } } } }