pipeline { agent any environment { REGISTRY = 'docker.io/adelyao' APP_NAME = 'employee' MANIFEST_REPO = 'https://git.winteraccess.id/adel/Employee-manifest.git' GIT_USER = credentials('gitea-username') GIT_PASS = credentials('gitea-password') } stages { stage('Determine Environment') { steps { script { if (env.BRANCH_NAME == 'main' || env.BRANCH_NAME == 'dev') { overlayEnv = 'dev' } else if (env.BRANCH_NAME == 'staging' || env.BRANCH_NAME == 'stag') { overlayEnv = 'stag' } else if (env.BRANCH_NAME == 'production' || env.BRANCH_NAME == 'prod') { overlayEnv = 'prod' } else { error("Unknown branch: ${env.BRANCH_NAME}") } env.IMAGE_TAG_FINAL = "${overlayEnv}-${env.BRANCH_NAME}-build-${env.BUILD_NUMBER}" echo "Environment selected: ${overlayEnv}" } } } stage('Build and Push Docker Images') { steps { script { sh """ docker build -t ${REGISTRY}/${APP_NAME}-be:${IMAGE_TAG_FINAL} ./backend docker push ${REGISTRY}/${APP_NAME}-be:${IMAGE_TAG_FINAL} docker build -t ${REGISTRY}/${APP_NAME}-fe:${IMAGE_TAG_FINAL} ./frontend docker push ${REGISTRY}/${APP_NAME}-fe:${IMAGE_TAG_FINAL} """ } } } stage('Update Manifest Repository') { steps { script { sh """ set -e echo "Cloning manifest repo..." rm -rf Employee-manifest git clone -b ${overlayEnv} https://${GIT_USER}:${GIT_PASS}@${MANIFEST_REPO.replace('https://', '')} Employee-manifest cd Employee-manifest echo "Cleaning overlays folder, keeping only ${overlayEnv}..." for d in overlays/*; do [ -d "\$d" ] || continue if [ "\$(basename \"\$d\")" != "${overlayEnv}" ]; then echo "Removing \$d" rm -rf "\$d" fi done echo "Updating image tags for ${overlayEnv}..." 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 git config user.email "jenkins@automation.local" git config user.name "Jenkins CI" 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" echo "Pushing updates to branch ${overlayEnv}" git push https://\$GIT_USER:\$GIT_PASS@${env.MANIFEST_REPO.replace('https://', '')} ${overlayEnv} || echo "No push needed for ${overlayEnv}" """ } } } } post { success { echo 'Pipeline completed successfully.' } failure { echo 'Pipeline failed. Please check logs.' } } }