pipeline { agent any environment { // Replace with your Docker Hub username/organization DOCKER_HUB_USERNAME = 'aimodocker' // Use credentials for Docker Hub DOCKER_CREDENTIALS = credentials('aimodocker') // Replace with your image name IMAGE_NAME = 'oh-service' // Variable for Git commit hash GIT_COMMIT_HASH = '' } stages { stage('Checkout') { steps { script { // Checkout and get git commit hash checkout scm def commitHash = sh(script: 'git rev-parse --short HEAD', returnStdout: true).trim() GIT_COMMIT_HASH = commitHash echo "Git commit hash: ${GIT_COMMIT_HASH}" } } } stage('Docker Login') { steps { sh ''' echo ${DOCKER_CREDENTIALS_PSW} | docker login -u ${DOCKER_CREDENTIALS_USR} --password-stdin ''' } } stage('Build Docker Image') { steps { script { // Build with commit hash tag def commitHash = sh(script: 'git rev-parse --short HEAD', returnStdout: true).trim() sh ''' docker build -t ${DOCKER_HUB_USERNAME}/${IMAGE_NAME}:latest . docker tag ${DOCKER_HUB_USERNAME}/${IMAGE_NAME}:latest ${DOCKER_HUB_USERNAME}/${IMAGE_NAME}:${commitHash} ''' } } } stage('Push to Docker Hub') { steps { def commitHash = sh(script: 'git rev-parse --short HEAD', returnStdout: true).trim() sh ''' # Push both tags docker push ${DOCKER_HUB_USERNAME}/${IMAGE_NAME}:${commitHash} docker push ${DOCKER_HUB_USERNAME}/${IMAGE_NAME}:latest ''' } } } post { always { // Clean up sh 'docker logout' // Clean up local images script { try { sh ''' docker rmi ${DOCKER_HUB_USERNAME}/${IMAGE_NAME}:${GIT_COMMIT_HASH} docker rmi ${DOCKER_HUB_USERNAME}/${IMAGE_NAME}:latest ''' } catch (err) { echo "Failed to clean up images: ${err}" } } } success { echo "Successfully built and pushed Docker image with tags: latest and ${GIT_COMMIT_HASH}" } failure { echo 'Failed to build/push Docker image!' } } }