pipeline { agent { label 'docker' } triggers { pollSCM('H/5 * * * *') // every ~5 minutes cron('H 3 * * 0') // every week once } // 👇 Fill these for your setup environment { GIT_URL = '/var/git/git-server.git' GIT_BRANCH = 'trunk' GIT_CREDENTIALS = '' // Jenkins credentialsId (leave empty for public) REGISTRY = 'docker.it-jaros.com' // e.g. ghcr.io/you or registry.example.com/namespace DOCKER_HUB = 'jarlucmat/git-server' GROUP_ID = 'com.it-jaros.git' IMAGE_NAME = "${REGISTRY}/${GROUP_ID}" PLATFORMS = 'linux/arm64/v8,linux/amd64' ALPINE_VERSION = '3.20' } 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' )]) { sh ''' docker version docker buildx version docker buildx ls | grep -q multiarch || docker buildx create --name multiarch --use --bootstrap echo "$DOCKER_PASS" | docker login $REGISTRY -u "$DOCKER_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 \ . ''' } } } } }