You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

94 lines
3.1 KiB
Groovy

pipeline {
agent any
environment {
DOCKER_HUB_USERNAME = 'aimodocker'
DOCKER_AUTH = credentials('aimodocker')
IMAGE_NAME = 'i-rcfa'
SERVICE_NAME = 'ahm-app'
SECURITY_PREFIX = 'security'
DOCKER_BUILDKIT = '1'
}
stages {
stage('Checkout & Setup') {
steps {
script {
checkout scm
env.GIT_COMMIT_HASH = sh(script: 'git rev-parse --short HEAD', returnStdout: true).trim()
def branch = env.BRANCH_NAME ?: 'unknown'
echo "Current Branch: ${branch}"
if (branch == 'main') {
env.IMAGE_TAG = env.GIT_COMMIT_HASH
env.SECONDARY_TAG = 'latest'
} else if (branch == 'ircfa_security') {
env.IMAGE_TAG = "${env.SECURITY_PREFIX}-${env.GIT_COMMIT_HASH}"
env.SECONDARY_TAG = "${env.SECURITY_PREFIX}-latest"
} else {
env.IMAGE_TAG = "temp-${env.GIT_COMMIT_HASH}"
env.SECONDARY_TAG = ""
}
echo "Primary Tag: ${env.IMAGE_TAG}"
echo "Secondary Tag: ${env.SECONDARY_TAG}"
}
}
}
stage('Docker Login') {
steps {
sh "echo ${DOCKER_AUTH_PSW} | docker login -u ${DOCKER_AUTH_USR} --password-stdin"
}
}
stage('Build & Tag') {
steps {
script {
def fullImageName = "${env.DOCKER_HUB_USERNAME}/${env.IMAGE_NAME}"
def cacheTag = env.SECONDARY_TAG ?: "latest"
echo "Pulling latest image for caching..."
sh "docker pull ${fullImageName}:${cacheTag} || true"
sh "docker build --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from ${fullImageName}:${cacheTag} -t ${fullImageName}:${env.IMAGE_TAG} ."
if (env.SECONDARY_TAG) {
sh "docker tag ${fullImageName}:${env.IMAGE_TAG} ${fullImageName}:${env.SECONDARY_TAG}"
}
}
}
}
stage('Push to Docker Hub') {
steps {
script {
def fullImageName = "${env.DOCKER_HUB_USERNAME}/${env.IMAGE_NAME}"
sh "docker push ${fullImageName}:${env.IMAGE_TAG}"
if (env.SECONDARY_TAG) {
sh "docker push ${fullImageName}:${env.SECONDARY_TAG}"
}
}
}
}
}
post {
always {
script {
sh 'docker logout'
def fullImageName = "${env.DOCKER_HUB_USERNAME}/${env.IMAGE_NAME}"
sh "docker rmi ${fullImageName}:${env.IMAGE_TAG} || true"
if (env.SECONDARY_TAG) {
sh "docker rmi ${fullImageName}:${env.SECONDARY_TAG} || true"
}
}
}
success {
echo "Successfully processed ${env.BRANCH_NAME} — ${env.IMAGE_TAG}."
}
}
}