From cb961f4933e91ce643e706bc5700c7e7d1f85dbe Mon Sep 17 00:00:00 2001 From: Hannes Wellmann Date: Thu, 5 Mar 2026 18:09:31 +0100 Subject: [PATCH] [RelEng|Build] Unify identifier-matching and env-variable assignment --- JenkinsJobs/Builds/build.jenkinsfile | 19 ++++++------- .../cleanupReleaseArtifacts.jenkinsfile | 4 +-- .../Releng/prepareNextDevCycle.jenkinsfile | 3 +- JenkinsJobs/Releng/promoteBuild.jenkinsfile | 3 +- .../Releng/publishPromotedBuild.jenkinsfile | 28 ++++++++++--------- JenkinsJobs/shared/utilities.groovy | 10 +++++-- 6 files changed, 34 insertions(+), 33 deletions(-) diff --git a/JenkinsJobs/Builds/build.jenkinsfile b/JenkinsJobs/Builds/build.jenkinsfile index ff558248ef4..bc5ef2e50dc 100644 --- a/JenkinsJobs/Builds/build.jenkinsfile +++ b/JenkinsJobs/Builds/build.jenkinsfile @@ -53,22 +53,20 @@ pipeline { stages { stage('Set up environment') { steps { - script { // Extend build configuration with data from the configuration file - def matcher = "$JOB_BASE_NAME" =~ '(?[IY])-build-(?\\d).(?\\d+)' - if (!matcher) { - error("Unsupported job: $JOB_BASE_NAME") - } - assignEnvVariable('BUILD_TYPE', matcher.group('type')) + script { + utilities = load 'JenkinsJobs/shared/utilities.groovy' + + def job = utilities.matchPattern('Job name', "${JOB_BASE_NAME}", [ /(?[IY])-build-(?\d).(?\d+)/ ]) + // Load build properties and configuration from the properties and configuration file + assignEnvVariable('BUILD_TYPE', job.type) def configurations = readJSON(file: "${WORKSPACE}/JenkinsJobs/buildConfigurations.json") BUILD = configurations["${BUILD_TYPE}"] assignEnvVariable('BUILD_TYPE_NAME', BUILD.typeName) assignEnvVariable('GIT_SUBMODULE_BRANCHES', BUILD.branches ? BUILD.branches.collect{ name, branch -> "${name}:${branch}" }.join(',') : '') - assignEnvVariable('TEST_NAME_PREFIX', "ep${matcher.group('major')}${matcher.group('minor')}${BUILD_TYPE}-unit") + assignEnvVariable('TEST_NAME_PREFIX', "ep${job.major}${job.minor}${BUILD_TYPE}-unit") assignEnvVariable('TEST_CONFIGURATIONS_EXPECTED', BUILD.tests.collect{ c -> "${TEST_NAME_PREFIX}-${c.os}-${c.arch}-java${c.javaVersion}_${c.os}.${c.ws}.${c.arch}_${c.javaVersion}" }.join(',')) - - utilities = load 'JenkinsJobs/shared/utilities.groovy' } dir("${CJE_ROOT}") { sh '''#!/bin/bash -xe @@ -642,8 +640,7 @@ def utilities = null @NonCPS def assignEnvVariable(String name, String value) { - env[name] = value - println("${name}=${value}") + utilities.assignEnvVariable(name, value) } def exportPropertiesAsEnvironmentVariables(String propertiesFile, Collection exportedVariables){ diff --git a/JenkinsJobs/Cleanup/cleanupReleaseArtifacts.jenkinsfile b/JenkinsJobs/Cleanup/cleanupReleaseArtifacts.jenkinsfile index 5035be3fc70..debad81f855 100644 --- a/JenkinsJobs/Cleanup/cleanupReleaseArtifacts.jenkinsfile +++ b/JenkinsJobs/Cleanup/cleanupReleaseArtifacts.jenkinsfile @@ -45,9 +45,7 @@ pipeline { def allReleases = allDrops.findAll{ d -> d.startsWith('R-')}.sort().reverse() // sort in descending order def releaseVersions = allReleases.collectEntries{ release -> - def version = utilities.matchBuildIdentifier(release, - { iBuild -> error "I-builds are not supprted: ${release}" }, - { rBuild -> return rBuild }) + def version = utilities.matchBuildIdentifier(release, null, {}) return [ (release): [ 'version': version.label, 'major': version.major.toInteger(), 'minor': version.minor.toInteger(), diff --git a/JenkinsJobs/Releng/prepareNextDevCycle.jenkinsfile b/JenkinsJobs/Releng/prepareNextDevCycle.jenkinsfile index 828195eff82..bf473e0dd86 100644 --- a/JenkinsJobs/Releng/prepareNextDevCycle.jenkinsfile +++ b/JenkinsJobs/Releng/prepareNextDevCycle.jenkinsfile @@ -431,8 +431,7 @@ def githubAPI = null @NonCPS def assignEnvVariable(String name, Object value) { - env[name] = value?.toString() - println("${name}=${value}") + utilities.assignEnvVariable(name, value) } @NonCPS diff --git a/JenkinsJobs/Releng/promoteBuild.jenkinsfile b/JenkinsJobs/Releng/promoteBuild.jenkinsfile index 38d3d313a02..2900f35385a 100644 --- a/JenkinsJobs/Releng/promoteBuild.jenkinsfile +++ b/JenkinsJobs/Releng/promoteBuild.jenkinsfile @@ -428,6 +428,5 @@ def githubAPI = null @NonCPS def assignEnvVariable(String name, String value) { - env."${name}" = value - println("${name}=${value}") + utilities.assignEnvVariable(name, value) } diff --git a/JenkinsJobs/Releng/publishPromotedBuild.jenkinsfile b/JenkinsJobs/Releng/publishPromotedBuild.jenkinsfile index 2397d6fcf44..8fef4952ac3 100644 --- a/JenkinsJobs/Releng/publishPromotedBuild.jenkinsfile +++ b/JenkinsJobs/Releng/publishPromotedBuild.jenkinsfile @@ -7,7 +7,7 @@ Therefore, both jobs have to share a 'workspace', and the output of the first jo pipeline { options { - skipDefaultCheckout() + checkoutToSubdirectory('git-repo') timestamps() timeout(time: 45, unit: 'MINUTES') buildDiscarder(logRotator(numToKeepStr:'10')) @@ -35,20 +35,20 @@ pipeline { stage('Process Input') { steps { script { + // Always load the script from the very same state this pipeline is loaded (to ensure consistency) + utilities = load 'git-repo/JenkinsJobs/shared/utilities.groovy' + if (!params.releaseBuildID) { error "Required parameter 'releaseBuildID' is not defined." } assignEnvVariable('RELEASE_BUILD_ID', params.releaseBuildID) - def idMatcher = env.RELEASE_BUILD_ID =~ /(?[SR])-(?\d+)\.(?\d+)(\.\d+)?(?(M|RC)\d+[a-z]?)?-(?\d{8})(?