pipeline { agent any stages { stage('Cloning configuration repository'){ steps { dir('ops-jenkins-config'){ git branch: 'main', url: 'ssh://git@git.gansejunge.com:1322/devops-project/ops-jenkins-config.git', credentialsId: 'jenkins-ssh' } } } stage('Load configuration files') { steps { script { def parts = env.JOB_NAME.split('-') env.service = parts[0..-2].join('-') env.stage = parts[-1] def configFile = "ops-jenkins-config/values/${env.service}/${env.stage}.env" def props = loadEnvFile(configFile) props.each { k, v -> env."${k}" = v } env.gitRepository = "ssh://git@git.gansejunge.com:1322/devops-project/${env.service}.git" } } stage('Clean Workspace') { steps { deleteDir() } } stage('Checkout Code') { steps { git branch: "${env.gitBranch}", url: "${env.gitRepository}", credentialsId: 'jenkins-ssh' } } stage('Get Commit ID') { steps { script { env.gitCommitID = sh(script: 'git rev-parse --short HEAD', returnStdout: true).trim() } } } stage('Build Docker Image') { steps { script { def imageTag = "${env.service}:${gitCommitID}-${env.BUILD_NUMBER}" def buildArgs = "--build-arg ARTIFACT_NAME=${env.service} --build-arg EXPOSED_PORT=${env.serviceExposedPort}" sh "docker build -t ${imageTag} ${buildArgs} ." } } } } } def loadEnvFile(path) { def map = [:] def content = readFile(path) content.split('\n').each { line -> line = line.trim() if (!line || line.startsWith('#')) return def parts = line.split('=', 2) if (parts.size() == 2) { map[parts[0].trim()] = parts[1].trim() } } return map }