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.

136 lines
4.6 KiB
Groovy

pipeline {
agent any
environment {
DOCKER_HUB_USERNAME = 'aimodocker'
DOCKER_AUTH = credentials('aimodocker') // provides DOCKER_AUTH_USR / DOCKER_AUTH_PSW
IMAGE_NAME = 'digitaltwin_frontend_v2'
// Populated in Checkout stage
GIT_COMMIT_HASH = ""
IMAGE_TAG = ""
SECONDARY_TAG = ""
}
parameters {
string(
name: 'EXTRA_DOCKER_BUILD_ARGS',
defaultValue: '',
description: 'Optional extra docker build args, e.g. --build-arg VITE_AUTH_APP_URL=https://api.example.com/auth'
)
}
stages {
stage('Checkout & Setup') {
steps {
script {
checkout scm
GIT_COMMIT_HASH = sh(script: 'git rev-parse --short HEAD', returnStdout: true).trim()
def branch = env.BRANCH_NAME ?: 'unknown'
echo "Branch: ${branch} | Commit: ${GIT_COMMIT_HASH}"
if (branch == 'main') {
IMAGE_TAG = GIT_COMMIT_HASH
SECONDARY_TAG = 'latest'
} else {
IMAGE_TAG = "temp-${GIT_COMMIT_HASH}"
SECONDARY_TAG = ""
}
echo "Primary Tag : ${IMAGE_TAG}"
echo "Secondary Tag: ${SECONDARY_TAG ?: '(none)'}"
}
}
}
stage('Docker Login') {
steps {
sh 'echo "$DOCKER_AUTH_PSW" | docker login -u "$DOCKER_AUTH_USR" --password-stdin'
}
}
stage('Build & Tag') {
steps {
script {
def fullImage = "${DOCKER_HUB_USERNAME}/${IMAGE_NAME}"
def viteArgs = [
'VITE_AUTH_APP_URL',
'VITE_EFFICIENCY_APP_URL',
'VITE_OH_APP_URL',
'VITE_PFI_APP_URL',
'VITE_API_V1_LIVE',
'VITE_LCCA_APP_URL',
'VITE_RELIABILITY_APP_URL',
'VITE_RISK_MATRIX_APP_URL',
'VITE_EQUIPMENT_IMAGE_URL',
'VITE_API_MONITORING_URL',
'VITE_RBD_APP_URL',
'VITE_IRCFA_APP_URL',
'VITE_AHM_APP_URL',
'VITE_OPS_DOCK_APP_URL',
'VITE_AUTH_URL',
'VITE_AUTH_SECRET',
'VITE_ENABLE_SECURE_EXPORT',
'VITE_ALLOW_ACCESS_EFFICIENCY',
'VITE_ALLOW_ACCESS_PFI',
'VITE_ALLOW_ACCESS_RELIABILITY',
'VITE_ALLOW_ACCESS_RISK_MATRIX',
'VITE_ALLOW_ACCESS_LCCA',
'VITE_ALLOW_ACCESS_RBD',
'VITE_ALLOW_ACCESS_OH',
'VITE_ALLOW_ACCESS_IRCFA',
'VITE_ALLOW_ACCESS_AHM',
'VITE_ENVIRONMENT'
].collect { "--build-arg ${it}" }.join(' ')
def extraArgs = params.EXTRA_DOCKER_BUILD_ARGS?.trim() ?: ''
sh "docker build ${viteArgs} ${extraArgs} -t ${fullImage}:${IMAGE_TAG} ."
if (SECONDARY_TAG) {
sh "docker tag ${fullImage}:${IMAGE_TAG} ${fullImage}:${SECONDARY_TAG}"
}
}
}
}
stage('Push to Docker Hub') {
steps {
script {
def fullImage = "${DOCKER_HUB_USERNAME}/${IMAGE_NAME}"
sh "docker push ${fullImage}:${IMAGE_TAG}"
if (SECONDARY_TAG) {
sh "docker push ${fullImage}:${SECONDARY_TAG}"
}
}
}
}
}
post {
always {
script {
sh 'docker logout'
def fullImage = "${DOCKER_HUB_USERNAME}/${IMAGE_NAME}"
if (IMAGE_TAG?.trim()) {
sh "docker rmi ${fullImage}:${IMAGE_TAG} || true"
}
if (SECONDARY_TAG?.trim()) {
sh "docker rmi ${fullImage}:${SECONDARY_TAG} || true"
}
}
}
success {
echo "Image ${DOCKER_HUB_USERNAME}/${IMAGE_NAME}:${IMAGE_TAG} pushed successfully."
}
failure {
echo "Pipeline failed on branch ${env.BRANCH_NAME}."
}
}
}