nelm-ci/Jenkinsfile

84 lines
2.9 KiB
Plaintext
Raw Permalink Normal View History

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-<ENV>')
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}"
}
}
}