pipeline { agent any parameters { choice(name: 'SERVICE', choices: ['postgres', 'seaweedfs', 'ollama', 'keycloak', 'vllm', 'all'], description: 'Service to build/deploy') choice(name: 'ENV', choices: ['dev', 'preprod', 'prod'], description: 'Target environment / namespace') choice(name: 'ACTION', choices: ['build', 'deploy', 'build-and-deploy'], description: 'Pipeline action') booleanParam(name: 'USE_PUBLIC_IMAGES', defaultValue: false, description: 'Use values-public.yaml (only for lab smoke tests; false in closed loop)') string(name: 'REGISTRY', defaultValue: '192.168.10.68:5000', description: 'Internal registry for push/tag') string(name: 'KUBE_CONTEXT', defaultValue: '', description: 'Optional override; default lab-cluster-') string(name: 'GIT_BASE_URL', defaultValue: 'http://192.168.10.68:7990/bbadmin', description: 'Bitbucket project base URL without trailing slash') string(name: 'GIT_BRANCH', defaultValue: 'main', description: 'Branch to build/deploy') } environment { PATH = "/home/ubuntu/bin:${env.HOME}/bin:/usr/local/bin:${env.PATH}" KUBECONFIG = "/home/ubuntu/kube-deploy.config" NELM_SECRET_KEY = credentials('nelm-secret-key') BITBUCKET_GIT = credentials('bitbucket-git') } options { timestamps() disableConcurrentBuilds() } stages { stage('Checkout from Bitbucket') { steps { script { def services = params.SERVICE == 'all' ? ['postgres', 'seaweedfs', 'ollama', 'keycloak', 'vllm'] : [params.SERVICE] env.SERVICES = services.join(' ') env.REPOS_DIR = "${env.WORKSPACE}/repos" withEnv([ "GIT_BASE_URL=${params.GIT_BASE_URL}", "GIT_BRANCH=${params.GIT_BRANCH}", "SERVICES=${env.SERVICES}", "DEST=${env.REPOS_DIR}", "GIT_USER=${env.BITBUCKET_GIT_USR}", "GIT_TOKEN=${env.BITBUCKET_GIT_PSW}", "GIT_SSL_NO_VERIFY=1" ]) { sh 'bash jenkins/checkout-repos.sh' } } } } stage('Build') { when { expression { params.ACTION == 'build' || params.ACTION == 'build-and-deploy' } } steps { script { load "${env.WORKSPACE}/jenkins/build.groovy" env.SERVICES.split(' ').each { svc -> buildService(svc, params.REGISTRY, params.ENV, env.REPOS_DIR) } } } } stage('Deploy') { when { expression { params.ACTION == 'deploy' || params.ACTION == 'build-and-deploy' } } steps { script { load "${env.WORKSPACE}/jenkins/deploy.groovy" env.SERVICES.split(' ').each { svc -> deployService(svc, params.ENV, params.USE_PUBLIC_IMAGES, params.KUBE_CONTEXT, env.REPOS_DIR) } } } } } post { always { echo "Done: SERVICE=${params.SERVICE} ENV=${params.ENV} ACTION=${params.ACTION} BRANCH=${params.GIT_BRANCH}" } } }