pipeline { agent none options { buildDiscarder(logRotator(numToKeepStr: '10')) disableConcurrentBuilds() } stages { stage('Build & Test') { agent { label getAgentLabel() } stages { stage('Cleanup Workspace') { steps { cleanWs() } } stage('Checkout') { steps { checkout scm } } stage('Inject Environment File') { when { not { anyOf { branch pattern: "feature/.*", comparator: "REGEXP" branch pattern: "bug/.*", comparator: "REGEXP" } } } steps { configFileProvider( [configFile( fileId: getEnvFileId(), targetLocation: 'src/environments/environment.ts', replaceTokens: true )] ) { echo "Injected environment for ${env.BRANCH_NAME}" } } } stage('Install Dependencies') { steps { sh 'npm ci' } } stage('Run Tests') { when { anyOf { branch pattern: "feature/.*", comparator: "REGEXP" branch pattern: "bug/.*", comparator: "REGEXP" branch 'develop' branch 'prod' } } steps { sh 'npm run test -- --watch=false --browsers=ChromeHeadless' } } stage('Build Angular App') { when { anyOf { branch 'develop' branch 'prod' } } steps { sh ''' ng build --configuration production --base-href /admin/ ''' } } } } stage('Production Approval') { when { branch 'prod' } steps { input message: "Approve deployment to PRODUCTION?", ok: "Deploy" } } stage('Deploy & Verify') { when { anyOf { branch 'develop' branch 'prod' } } agent { label getAgentLabel() } stages { stage('Deploy') { steps { sh """ rsync -av --delete dist/portfolio-admin/browser/ ${getDeployPath()}/ sudo /usr/bin/systemctl reload nginx """ } } stage('Health Check') { steps { sh """ sleep 3 curl -f ${getHealthUrl()} """ } } } } } post { success { echo "Deployment successful for ${env.BRANCH_NAME}" } failure { echo "Deployment failed for ${env.BRANCH_NAME}" } } } // // -------- Helper Methods -------- // def getAgentLabel() { if (env.BRANCH_NAME == 'prod') { return 'oracle-prod' } else { return 'built-in' } } def getEnvFileId() { if (env.BRANCH_NAME == 'prod') { return 'admin-prod-properties' } else { return 'admin-uat-properties' } } def getDeployPath() { if (env.BRANCH_NAME == 'prod') { return "/var/www/bangararaju.kottedi.in/admin" } else { return "/var/www/bangararaju.kottedi.in/admin" } } def getHealthUrl() { if (env.BRANCH_NAME == 'prod') { return "https://bangararaju.kottedi.in/admin" } else { return "https://bangararaju-uat.kottedi.in/admin" } }