Skip to content

Commit 0c1b585

Browse files
committed
[RelEng|Build] Unify identifier-matching and env-variable assignment
1 parent 03ccb6b commit 0c1b585

6 files changed

Lines changed: 34 additions & 33 deletions

File tree

JenkinsJobs/Builds/build.jenkinsfile

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -53,22 +53,20 @@ pipeline {
5353
stages {
5454
stage('Set up environment') {
5555
steps {
56-
script { // Extend build configuration with data from the configuration file
57-
def matcher = "$JOB_BASE_NAME" =~ '(?<type>[IY])-build-(?<major>\\d).(?<minor>\\d+)'
58-
if (!matcher) {
59-
error("Unsupported job: $JOB_BASE_NAME")
60-
}
61-
assignEnvVariable('BUILD_TYPE', matcher.group('type'))
56+
script {
57+
utilities = load 'JenkinsJobs/shared/utilities.groovy'
58+
59+
def job = utilities.matchPattern('Job name', "${JOB_BASE_NAME}", [ /(?<type>[IY])-build-(?<major>\d).(?<minor>\d+)/ ])
60+
// Load build properties and configuration from the properties and configuration file
61+
assignEnvVariable('BUILD_TYPE', job.type)
6262
def configurations = readJSON(file: "${WORKSPACE}/JenkinsJobs/buildConfigurations.json")
6363
BUILD = configurations["${BUILD_TYPE}"]
6464
assignEnvVariable('BUILD_TYPE_NAME', BUILD.typeName)
6565
assignEnvVariable('GIT_SUBMODULE_BRANCHES', BUILD.branches ? BUILD.branches.collect{ name, branch -> "${name}:${branch}" }.join(',') : '')
66-
assignEnvVariable('TEST_NAME_PREFIX', "ep${matcher.group('major')}${matcher.group('minor')}${BUILD_TYPE}-unit")
66+
assignEnvVariable('TEST_NAME_PREFIX', "ep${job.major}${job.minor}${BUILD_TYPE}-unit")
6767
assignEnvVariable('TEST_CONFIGURATIONS_EXPECTED', BUILD.tests.collect{ c ->
6868
"${TEST_NAME_PREFIX}-${c.os}-${c.arch}-java${c.javaVersion}_${c.os}.${c.ws}.${c.arch}_${c.javaVersion}"
6969
}.join(','))
70-
71-
utilities = load 'JenkinsJobs/shared/utilities.groovy'
7270
}
7371
dir("${CJE_ROOT}") {
7472
sh '''#!/bin/bash -xe
@@ -642,8 +640,7 @@ def utilities = null
642640

643641
@NonCPS
644642
def assignEnvVariable(String name, String value) {
645-
env[name] = value
646-
println("${name}=${value}")
643+
utilities.assignEnvVariable(name, value)
647644
}
648645

649646
def exportPropertiesAsEnvironmentVariables(String propertiesFile, Collection<String> exportedVariables){

JenkinsJobs/Cleanup/cleanupReleaseArtifacts.jenkinsfile

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,7 @@ pipeline {
4545
def allReleases = allDrops.findAll{ d -> d.startsWith('R-')}.sort().reverse() // sort in descending order
4646

4747
def releaseVersions = allReleases.collectEntries{ release ->
48-
def version = utilities.matchBuildIdentifier(release,
49-
{ iBuild -> error "I-builds are not supprted: ${release}" },
50-
{ rBuild -> return rBuild })
48+
def version = utilities.matchBuildIdentifier(release, null, {})
5149
return [ (release): [ 'version': version.label,
5250
'major': version.major.toInteger(),
5351
'minor': version.minor.toInteger(),

JenkinsJobs/Releng/prepareNextDevCycle.jenkinsfile

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -431,8 +431,7 @@ def githubAPI = null
431431

432432
@NonCPS
433433
def assignEnvVariable(String name, Object value) {
434-
env[name] = value?.toString()
435-
println("${name}=${value}")
434+
utilities.assignEnvVariable(name, value)
436435
}
437436

438437
@NonCPS

JenkinsJobs/Releng/promoteBuild.jenkinsfile

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,5 @@ def githubAPI = null
428428

429429
@NonCPS
430430
def assignEnvVariable(String name, String value) {
431-
env."${name}" = value
432-
println("${name}=${value}")
431+
utilities.assignEnvVariable(name, value)
433432
}

JenkinsJobs/Releng/publishPromotedBuild.jenkinsfile

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Therefore, both jobs have to share a 'workspace', and the output of the first jo
77

88
pipeline {
99
options {
10-
skipDefaultCheckout()
10+
checkoutToSubdirectory('git-repo')
1111
timestamps()
1212
timeout(time: 45, unit: 'MINUTES')
1313
buildDiscarder(logRotator(numToKeepStr:'10'))
@@ -35,20 +35,20 @@ pipeline {
3535
stage('Process Input') {
3636
steps {
3737
script {
38+
// Always load the script from the very same state this pipeline is loaded (to ensure consistency)
39+
utilities = load 'git-repo/JenkinsJobs/shared/utilities.groovy'
40+
3841
if (!params.releaseBuildID) {
3942
error "Required parameter 'releaseBuildID' is not defined."
4043
}
4144
assignEnvVariable('RELEASE_BUILD_ID', params.releaseBuildID)
42-
def idMatcher = env.RELEASE_BUILD_ID =~ /(?<type>[SR])-(?<major>\d+)\.(?<minor>\d+)(\.\d+)?(?<checkpoint>(M|RC)\d+[a-z]?)?-(?<date>\d{8})(?<time>\d{4})/
43-
if (!idMatcher.matches()) {
44-
error "releaseID: ${RELEASE_BUILD_ID}, does not match the expected pattern."
45-
}
46-
assignEnvVariable('RELEASE_TYPE', idMatcher.group('type'))
47-
assignEnvVariable('RELEASE_VERSION_MAJOR', idMatcher.group('major'))
48-
assignEnvVariable('RELEASE_VERSION_MINOR', idMatcher.group('minor'))
49-
assignEnvVariable('CHECKPOINT', idMatcher.group('checkpoint') ?: 'GA')
50-
def buildId = "I${idMatcher.group('date')}-${idMatcher.group('time')}"
51-
idMatcher = null // release matcher as it's not serializable
45+
def build = utilities.matchBuildIdentifier("${RELEASE_BUILD_ID}", null, {})
46+
47+
assignEnvVariable('RELEASE_TYPE', build.type)
48+
assignEnvVariable('RELEASE_VERSION_MAJOR', build.major)
49+
assignEnvVariable('RELEASE_VERSION_MINOR', build.minor)
50+
assignEnvVariable('CHECKPOINT', build.checkpoint ?: 'GA')
51+
def buildId = "I${build.date}-${build.time}"
5252

5353
if (env.RELEASE_TYPE == 'R') {
5454
assignEnvVariable('REPOSITORY_PATH', "${RELEASE_VERSION_MAJOR}.${RELEASE_VERSION_MINOR}/${RELEASE_BUILD_ID}")
@@ -175,8 +175,10 @@ pipeline {
175175
}
176176
}
177177

178+
@groovy.transform.Field
179+
def utilities = null
180+
178181
@NonCPS
179182
def assignEnvVariable(String name, String value) {
180-
env."${name}" = value
181-
println("${name}=${value}")
183+
utilities.assignEnvVariable(name, value)
182184
}

JenkinsJobs/shared/utilities.groovy

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ def matchBuildIdentifier(String dropID, Closure iBuildHandler, Closure sBuildHan
2626
/(?<type>[I])(?<date>\d{8})-(?<time>\d{4})/,
2727
/(?<type>[SR])-(?<label>(?<major>\d+)\.(?<minor>\d+)(\.(?<service>\d+))?(?<checkpoint>(M|RC)\d+[a-z]?)?)-(?<date>\d{8})(?<time>\d{4})/,
2828
], [
29-
{ iBuild -> Objects.requireNonNull(iBuildHandler, "No handler for I-build id match: ${dropID}").call(iBuild)},
30-
{ sBuild -> Objects.requireNonNull(sBuildHandler, "No handler for S-build id match: ${dropID}").call(sBuild)},
29+
{ iBuild -> Objects.requireNonNull(iBuildHandler, "I-build ID not supported: ${dropID}").call(iBuild)},
30+
{ sBuild -> Objects.requireNonNull(sBuildHandler, "S/R-build ID not supported: ${dropID}").call(sBuild)},
3131
])
3232
}
3333

@@ -41,6 +41,12 @@ def stableBuildGitTag(CharSequence dropID) {
4141
return stableBuildGitTag(matchBuildIdentifier(dropID, null, { }))
4242
}
4343

44+
@NonCPS
45+
def assignEnvVariable(String name, Object value) {
46+
env[name] = value?.toString()?.trim()
47+
println("${name}=${value}")
48+
}
49+
4450
// --- local file modifications ---
4551

4652
def replaceAllInFile(String filePath, Map<String,String> replacements) {

0 commit comments

Comments
 (0)