From 6863825e97eac4dd05cbd3f306b37013bc6aa03b Mon Sep 17 00:00:00 2001 From: adelyaou Date: Thu, 23 Oct 2025 18:15:27 +0700 Subject: [PATCH] update: jenkinsfile code for multibranch pipeline --- Jenkinsfile | 48 +++++++++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 002856d..4a0f9d7 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -7,7 +7,6 @@ pipeline { MANIFEST_REPO = "https://git.winteraccess.id/adel/Employee-manifest.git" MANIFEST_CRED_ID = "GIT_CRED_ID" DOCKER_CRED_ID = "DOCKER_CRED_ID" - BRANCHES = "dev stag prod" MANIFEST_DIR = "manifest" } @@ -16,7 +15,6 @@ pipeline { } stages { - stage('Prepare Workspace') { steps { cleanWs() @@ -47,11 +45,9 @@ pipeline { sh """ echo "\$DOCKER_PASS" | docker login -u "\$DOCKER_USER" --password-stdin - # Build & push backend docker build -t ${REGISTRY}/${APP_NAME}-be:${tag} ./employee-be docker push ${REGISTRY}/${APP_NAME}-be:${tag} - # Build & push frontend docker build -t ${REGISTRY}/${APP_NAME}-fe:${tag} ./employee-fe docker push ${REGISTRY}/${APP_NAME}-fe:${tag} @@ -64,33 +60,43 @@ pipeline { } } - stage('Update Manifests for All Environments') { + stage('Update Manifest for Current Branch') { steps { script { - withCredentials([usernamePassword(credentialsId: env.MANIFEST_CRED_ID, usernameVariable: 'GIT_USER', passwordVariable: 'GIT_PASS')]) { + def currentBranch = env.BRANCH_NAME ?: sh(script: "git rev-parse --abbrev-ref HEAD", returnStdout: true).trim() + echo "Current branch detected: ${currentBranch}" - // Clone manifest repo pakai credential + def envMap = [ + "develop": "dev", + "staging": "stag", + "main": "prod" + ] + def overlayEnv = envMap.get(currentBranch, currentBranch) + + if (!["dev", "stag", "prod"].contains(overlayEnv)) { + error "Invalid branch/environment: ${overlayEnv}. Only dev, stag, or prod allowed." + } + + withCredentials([usernamePassword(credentialsId: env.MANIFEST_CRED_ID, usernameVariable: 'GIT_USER', passwordVariable: 'GIT_PASS')]) { sh """ + echo "Cloning manifest repo..." rm -rf ${MANIFEST_DIR} git clone https://\$GIT_USER:\$GIT_PASS@${env.MANIFEST_REPO.replace('https://', '')} ${MANIFEST_DIR} """ dir(env.MANIFEST_DIR) { - env.BRANCHES.split().each { envName -> - echo "🔹 Updating manifests for environment: ${envName}" + sh """ + git checkout ${overlayEnv} || git checkout -b ${overlayEnv} - sh """ - git checkout ${envName} || git checkout -b ${envName} + echo "Updating image tags inside overlays/${overlayEnv}/patch-deployment.yaml..." + yq e -i '(.spec.template.spec.containers[] | select(.name == "backend") | .image) = "${REGISTRY}/${APP_NAME}-be:${overlayEnv}-${env.IMAGE_TAG_FINAL}"' overlays/${overlayEnv}/patch-deployment.yaml + yq e -i '(.spec.template.spec.containers[] | select(.name == "frontend") | .image) = "${REGISTRY}/${APP_NAME}-fe:${overlayEnv}-${env.IMAGE_TAG_FINAL}"' overlays/${overlayEnv}/patch-deployment.yaml - # Update backend & frontend image tags di overlay sesuai environment - yq e -i '.spec.template.spec.containers[0].image = "${REGISTRY}/${APP_NAME}-be:${envName}-${env.IMAGE_TAG_FINAL}"' overlays/${envName}/patch-deployment.yaml - yq e -i '.spec.template.spec.containers[0].image = "${REGISTRY}/${APP_NAME}-fe:${envName}-${env.IMAGE_TAG_FINAL}"' overlays/${envName}/patch-deployment.yaml + git add overlays/${overlayEnv}/patch-deployment.yaml + git commit -m "chore(${overlayEnv}): update image tags to ${overlayEnv}-${env.IMAGE_TAG_FINAL}" || echo "No changes to commit" - git add overlays/${envName}/patch-deployment.yaml overlays/${envName}/patch-deployment.yaml - git commit -m "chore(${envName}): update image tags to ${envName}-${env.IMAGE_TAG_FINAL}" || echo "No changes for ${envName}" - git push https://\$GIT_USER:\$GIT_PASS@${env.MANIFEST_REPO.replace('https://', '')} ${envName} - """ - } + git push https://\$GIT_USER:\$GIT_PASS@${env.MANIFEST_REPO.replace('https://', '')} ${overlayEnv} + """ } } } @@ -106,10 +112,10 @@ pipeline { post { success { - echo "✅ GitOps pipeline completed successfully for dev, stag, and prod!" + echo "Pipeline completed successfully for branch: ${env.BRANCH_NAME}" } failure { - echo "❌ Pipeline failed. Check logs for details." + echo "Pipeline failed. Check logs for details." } } }