pipeline { agent any environment { REGISTRY = 'git.virtheart.com' REGISTRY_OWNER = 'virtheart' IMAGE_NAME = "${env.JOB_NAME.replaceAll(/[^a-zA-Z0-9.-]/, '-').toLowerCase()}" IMAGE_TAG = "${env.BUILD_NUMBER}" } stages { stage('Checkout') { steps { checkout scm } } stage('Build Image') { steps { script { def imageFullName = "${REGISTRY}/${REGISTRY_OWNER}/${IMAGE_NAME}:${IMAGE_TAG}" sh """ set -x docker version docker info docker build -t ${imageFullName} . || { echo "Docker build failed"; exit 1; } """ } } } stage('Push Image') { steps { withCredentials([usernamePassword(credentialsId: 'docker-registry-credentials', usernameVariable: 'REGISTRY_USERNAME', passwordVariable: 'REGISTRY_PASSWORD')]) { script { def imageFullName = "${REGISTRY}/${REGISTRY_OWNER}/${IMAGE_NAME}:${IMAGE_TAG}" sh """ set -x echo ${REGISTRY_PASSWORD} | docker login ${REGISTRY} -u ${REGISTRY_USERNAME} --password-stdin docker push ${imageFullName} docker rmi ${imageFullName} """ } } } } stage('Deploy Container') { steps { script { def imageFullName = "${REGISTRY}/${REGISTRY_OWNER}/${IMAGE_NAME}:${IMAGE_TAG}" sh """ docker stop ${IMAGE_NAME} || true docker rm ${IMAGE_NAME} || true docker run -d --name ${IMAGE_NAME} \ --restart unless-stopped \ ${imageFullName} """ } } } } post { always { cleanWs() } } }