diff --git a/FAQ.md b/FAQ.md index c70b23165..aded71d63 100644 --- a/FAQ.md +++ b/FAQ.md @@ -125,4 +125,10 @@ For more information, see the [PR testing documentation](./pipelines/build/prTes The operating systems/distributions which we build or are documented in the [openjdk-build wiki](https://github.com/AdoptOpenJDK/openjdk-build/wiki/%5BWIP%5D-Minimum-OS-levels). -Runtime platforms are in our [supported platforms page](https://adoptopenjdk.net/supported_platforms.html). \ No newline at end of file +Runtime platforms are in our [supported platforms page](https://adoptopenjdk.net/supported_platforms.html). + +## How to add a new build pipeline param and associated job configuration? + +The following PR: https://github.com/AdoptOpenJDK/openjdk-build/pull/2416 +demonstrates changes required to add a new build pipeline param, and also associated version/platform job configurations for setting the value when needed. + diff --git a/pipelines/build/common/build_base_file.groovy b/pipelines/build/common/build_base_file.groovy index eff2ec148..86df6fee4 100644 --- a/pipelines/build/common/build_base_file.groovy +++ b/pipelines/build/common/build_base_file.groovy @@ -51,6 +51,8 @@ class Builder implements Serializable { boolean enableInstallers boolean enableSigner boolean cleanWorkspaceBeforeBuild + boolean cleanWorkspaceAfterBuild + boolean cleanWorkspaceBuildOutputAfterBuild boolean propagateFailures boolean keepTestReportDir boolean keepReleaseLogs @@ -119,12 +121,20 @@ class Builder implements Serializable { def testList = getTestList(platformConfig) + def platformCleanWorkspaceAfterBuild = getCleanWorkspaceAfterBuild(platformConfig) + // Always clean on mac due to https://github.com/AdoptOpenJDK/openjdk-build/issues/1980 def cleanWorkspace = cleanWorkspaceBeforeBuild if (platformConfig.os == "mac") { cleanWorkspace = true } + def cleanWsAfter = cleanWorkspaceAfterBuild + if (platformCleanWorkspaceAfterBuild) { + // Platform override specified + cleanWsAfter = platformCleanWorkspaceAfterBuild + } + return new IndividualBuildConfig( JAVA_TO_BUILD: javaToBuild, ARCHITECTURE: platformConfig.arch as String, @@ -151,7 +161,9 @@ class Builder implements Serializable { ENABLE_TESTS: enableTests, ENABLE_INSTALLERS: enableInstallers, ENABLE_SIGNER: enableSigner, - CLEAN_WORKSPACE: cleanWorkspace + CLEAN_WORKSPACE: cleanWorkspace, + CLEAN_WORKSPACE_AFTER: cleanWsAfter, + CLEAN_WORKSPACE_BUILD_OUTPUT_ONLY_AFTER: cleanWorkspaceBuildOutputAfterBuild ) } @@ -220,6 +232,18 @@ class Builder implements Serializable { return testList } + /* + Get the cleanWorkspaceAfterBuild override for this platform configuration + */ + Boolean getCleanWorkspaceAfterBuild(Map configuration) { + Boolean cleanWorkspaceAfterBuild = null + if (configuration.containsKey("cleanWorkspaceAfterBuild") && configuration.get("cleanWorkspaceAfterBuild")) { + cleanWorkspaceAfterBuild = configuration.cleanWorkspaceAfterBuild as Boolean + } + + return cleanWorkspaceAfterBuild + } + /* Parses and applies the dockerExcludes parameter. Any platforms/variants that are declared in this parameter are marked as excluded from docker building via this function. Even if they have a docker image or file declared in the build configurations! @@ -683,6 +707,8 @@ return { String additionalBuildArgs, String overrideFileNameVersion, String cleanWorkspaceBeforeBuild, + String cleanWorkspaceAfterBuild, + String cleanWorkspaceBuildOutputAfterBuild, String adoptBuildNumber, String propagateFailures, String keepTestReportDir, @@ -734,6 +760,8 @@ return { additionalBuildArgs: additionalBuildArgs, overrideFileNameVersion: overrideFileNameVersion, cleanWorkspaceBeforeBuild: Boolean.parseBoolean(cleanWorkspaceBeforeBuild), + cleanWorkspaceAfterBuild: Boolean.parseBoolean(cleanWorkspaceAfterBuild), + cleanWorkspaceBuildOutputAfterBuild: Boolean.parseBoolean(cleanWorkspaceBuildOutputAfterBuild), adoptBuildNumber: adoptBuildNumber, propagateFailures: Boolean.parseBoolean(propagateFailures), keepTestReportDir: Boolean.parseBoolean(keepTestReportDir), diff --git a/pipelines/build/common/config_regeneration.groovy b/pipelines/build/common/config_regeneration.groovy index 32a9fd716..fff695713 100644 --- a/pipelines/build/common/config_regeneration.groovy +++ b/pipelines/build/common/config_regeneration.groovy @@ -335,7 +335,9 @@ class Regeneration implements Serializable { ENABLE_TESTS: true, ENABLE_INSTALLERS: true, ENABLE_SIGNER: true, - CLEAN_WORKSPACE: true + CLEAN_WORKSPACE: true, + CLEAN_WORKSPACE_AFTER: true, + CLEAN_WORKSPACE_BUILD_OUTPUT_ONLY_AFTER: false ) } catch (Exception e) { // Catch invalid configurations diff --git a/pipelines/build/common/create_job_from_template.groovy b/pipelines/build/common/create_job_from_template.groovy index 394f5a3cb..6f398713f 100644 --- a/pipelines/build/common/create_job_from_template.groovy +++ b/pipelines/build/common/create_job_from_template.groovy @@ -87,6 +87,8 @@ pipelineJob("$buildFolder/$JOB_NAME") {
ENABLE_INSTALLERS
Run installers
ENABLE_SIGNER
Run signer
CLEAN_WORKSPACE
Wipe out workspace before build
+
CLEAN_WORKSPACE_AFTER
Wipe out workspace after build
+
CLEAN_WORKSPACE_BUILD_OUTPUT_ONLY_AFTER
Wipe out workspace build output only, after build
""") } diff --git a/pipelines/build/common/openjdk_build_pipeline.groovy b/pipelines/build/common/openjdk_build_pipeline.groovy index 75bf0c17a..472d53e98 100644 --- a/pipelines/build/common/openjdk_build_pipeline.groovy +++ b/pipelines/build/common/openjdk_build_pipeline.groovy @@ -67,7 +67,6 @@ class Build { NODE_CHECKOUT_TIMEOUT : 1, BUILD_JDK_TIMEOUT : 8, BUILD_ARCHIVE_TIMEOUT : 3, - AIX_CLEAN_TIMEOUT : 1, MASTER_CLEAN_TIMEOUT : 1, DOCKER_CHECKOUT_TIMEOUT : 1, DOCKER_PULL_TIMEOUT : 2 @@ -906,27 +905,20 @@ class Build { Executed on a build node, the function checks out the repository and executes the build via ./make-adopt-build-farm.sh Once the build completes, it will calculate its version output, commit the first metadata writeout, and archive the build results. */ - def buildScripts(cleanWorkspace, filename) { + def buildScripts(cleanWorkspace, cleanWorkspaceAfter, cleanWorkspaceBuildOutputAfter, filename) { return context.stage("build") { - if (cleanWorkspace) { try { try { context.timeout(time: buildTimeouts.NODE_CLEAN_TIMEOUT, unit: "HOURS") { - if (buildConfig.TARGET_OS == "windows") { - // Windows machines struggle to clean themselves, see: - // https://github.com/AdoptOpenJDK/openjdk-build/issues/1855 - context.sh(script: "rm -rf C:/workspace/openjdk-build/workspace/build/src/build/*/jdk/gensrc") - // https://github.com/AdoptOpenJDK/openjdk-infrastructure/issues/1419 - context.sh(script: "rm -rf J:/jenkins/tmp/workspace/build/src/build/*/jdk/gensrc") - // https://github.com/AdoptOpenJDK/openjdk-infrastructure/issues/1662 - context.sh(script: "rm -rf E:/jenkins/tmp/workspace/build/src/build/*/jdk/gensrc") - // https://github.com/AdoptOpenJDK/openjdk-infrastructure/issues/1818 - context.sh(script: "rm -rf C:/Jenkins/temp/workspace/build/src/build/*/jdk/gensrc") - context.cleanWs notFailBuild: true, disableDeferredWipeout: true, deleteDirs: true + // Note: Underlying org.apache DirectoryScanner used by cleanWs has a bug scanning where it misses files containing ".." so use rm -rf instead + // Issue: https://issues.jenkins.io/browse/JENKINS-64779 + if (context.WORKSPACE != null && !context.WORKSPACE.isEmpty()) { + context.println "Cleaning workspace files: " + context.WORKSPACE + "/*" + context.sh(script: "rm -rf " + context.WORKSPACE + "/*") } else { - context.cleanWs notFailBuild: true + context.println "Warning: Unable to clean workspace as context.WORKSPACE is null/empty" } } } catch (FlowInterruptedException e) { @@ -999,15 +991,27 @@ class Build { } } finally { // post-build workspace clean: - // AIX due to limited ram drive space - // s390x due to limited available disk space on Marist nodes - if (buildConfig.TARGET_OS == "aix" || buildConfig.ARCHITECTURE == "s390x") { + if (cleanWorkspaceAfter || cleanWorkspaceBuildOutputAfter) { try { - context.timeout(time: buildTimeouts.AIX_CLEAN_TIMEOUT, unit: "HOURS") { - context.cleanWs notFailBuild: true + context.timeout(time: buildTimeouts.NODE_CLEAN_TIMEOUT, unit: "HOURS") { + // Note: Underlying org.apache DirectoryScanner used by cleanWs has a bug scanning where it misses files containing ".." so use rm -rf instead + // Issue: https://issues.jenkins.io/browse/JENKINS-64779 + if (context.WORKSPACE != null && !context.WORKSPACE.isEmpty()) { + if (cleanWorkspaceAfter) { + context.println "Cleaning workspace files: " + context.WORKSPACE + "/*" + context.sh(script: "rm -rf " + context.WORKSPACE + "/*") + } else if (cleanWorkspaceBuildOutputAfter) { + context.println "Cleaning workspace build output files: " + context.WORKSPACE + "/workspace/build/src/build" + context.sh(script: "rm -rf " + context.WORKSPACE + "/workspace/build/src/build") + context.println "Cleaning workspace build output files: " + context.WORKSPACE + "/workspace/target" + context.sh(script: "rm -rf " + context.WORKSPACE + "/workspace/target") + } + } else { + context.println "Warning: Unable to clean workspace as context.WORKSPACE is null/empty" + } } } catch (FlowInterruptedException e) { - context.println "[ERROR] AIX clean workspace timeout (${buildTimeouts.AIX_CLEAN_TIMEOUT} HOURS) has been reached. Exiting..." + context.println "[ERROR] clean workspace timeout (${buildTimeouts.NODE_CLEAN_TIMEOUT} HOURS) has been reached. Exiting..." throw new Exception() } } @@ -1076,6 +1080,8 @@ class Build { def enableInstallers = Boolean.valueOf(buildConfig.ENABLE_INSTALLERS) def enableSigner = Boolean.valueOf(buildConfig.ENABLE_SIGNER) def cleanWorkspace = Boolean.valueOf(buildConfig.CLEAN_WORKSPACE) + def cleanWorkspaceAfter = Boolean.valueOf(buildConfig.CLEAN_WORKSPACE_AFTER) + def cleanWorkspaceBuildOutputAfter = Boolean.valueOf(buildConfig.CLEAN_WORKSPACE_BUILD_OUTPUT_ONLY_AFTER) context.stage("queue") { /* This loads the library containing two Helper classes, and causes them to be @@ -1135,7 +1141,7 @@ class Build { } context.docker.build("build-image", "--build-arg image=${buildConfig.DOCKER_IMAGE} -f ${buildConfig.DOCKER_FILE} .").inside { - buildScripts(cleanWorkspace, filename) + buildScripts(cleanWorkspace, cleanWorkspaceAfter, cleanWorkspaceBuildOutputAfter, filename) } // Otherwise, pull the docker image from DockerHub } else { @@ -1149,7 +1155,7 @@ class Build { } context.docker.image(buildConfig.DOCKER_IMAGE).inside { - buildScripts(cleanWorkspace, filename) + buildScripts(cleanWorkspace, cleanWorkspaceAfter, cleanWorkspaceBuildOutputAfter, filename) } } } @@ -1170,10 +1176,10 @@ class Build { } context.echo("changing ${workspace}") context.ws(workspace) { - buildScripts(cleanWorkspace, filename) + buildScripts(cleanWorkspace, cleanWorkspaceAfter, cleanWorkspaceBuildOutputAfter, filename) } } else { - buildScripts(cleanWorkspace, filename) + buildScripts(cleanWorkspace, cleanWorkspaceAfter, cleanWorkspaceBuildOutputAfter, filename) } } context.println "[NODE SHIFT] OUT OF NODE (LABELNAME ${buildConfig.NODE_LABEL}!)" diff --git a/pipelines/build/openjdk10_pipeline.groovy b/pipelines/build/openjdk10_pipeline.groovy index 100a266b8..6d7f08370 100644 --- a/pipelines/build/openjdk10_pipeline.groovy +++ b/pipelines/build/openjdk10_pipeline.groovy @@ -43,6 +43,8 @@ if (scmVars != null && configureBuild != null && buildConfigurations != null) { additionalBuildArgs, overrideFileNameVersion, cleanWorkspaceBeforeBuild, + cleanWorkspaceAfterBuild, + cleanWorkspaceBuildOutputAfterBuild, adoptBuildNumber, propagateFailures, keepTestReportDir, diff --git a/pipelines/build/openjdk11_pipeline.groovy b/pipelines/build/openjdk11_pipeline.groovy index 9bea287e1..6ef1ea96e 100644 --- a/pipelines/build/openjdk11_pipeline.groovy +++ b/pipelines/build/openjdk11_pipeline.groovy @@ -43,6 +43,8 @@ if (scmVars != null && configureBuild != null && buildConfigurations != null) { additionalBuildArgs, overrideFileNameVersion, cleanWorkspaceBeforeBuild, + cleanWorkspaceAfterBuild, + cleanWorkspaceBuildOutputAfterBuild, adoptBuildNumber, propagateFailures, keepTestReportDir, diff --git a/pipelines/build/openjdk12_pipeline.groovy b/pipelines/build/openjdk12_pipeline.groovy index 9790c116d..409f16870 100644 --- a/pipelines/build/openjdk12_pipeline.groovy +++ b/pipelines/build/openjdk12_pipeline.groovy @@ -43,6 +43,8 @@ if (scmVars != null && configureBuild != null && buildConfigurations != null) { additionalBuildArgs, overrideFileNameVersion, cleanWorkspaceBeforeBuild, + cleanWorkspaceAfterBuild, + cleanWorkspaceBuildOutputAfterBuild, adoptBuildNumber, propagateFailures, keepTestReportDir, diff --git a/pipelines/build/openjdk13_pipeline.groovy b/pipelines/build/openjdk13_pipeline.groovy index aa94034b9..06c1a2759 100644 --- a/pipelines/build/openjdk13_pipeline.groovy +++ b/pipelines/build/openjdk13_pipeline.groovy @@ -43,6 +43,8 @@ if (scmVars != null && configureBuild != null && buildConfigurations != null) { additionalBuildArgs, overrideFileNameVersion, cleanWorkspaceBeforeBuild, + cleanWorkspaceAfterBuild, + cleanWorkspaceBuildOutputAfterBuild, adoptBuildNumber, propagateFailures, keepTestReportDir, diff --git a/pipelines/build/openjdk14_pipeline.groovy b/pipelines/build/openjdk14_pipeline.groovy index 8b3c5dff1..4c096858e 100644 --- a/pipelines/build/openjdk14_pipeline.groovy +++ b/pipelines/build/openjdk14_pipeline.groovy @@ -43,6 +43,8 @@ if (scmVars != null && configureBuild != null && buildConfigurations != null) { additionalBuildArgs, overrideFileNameVersion, cleanWorkspaceBeforeBuild, + cleanWorkspaceAfterBuild, + cleanWorkspaceBuildOutputAfterBuild, adoptBuildNumber, propagateFailures, keepTestReportDir, diff --git a/pipelines/build/openjdk15_pipeline.groovy b/pipelines/build/openjdk15_pipeline.groovy index 6de4554fe..c833d382e 100644 --- a/pipelines/build/openjdk15_pipeline.groovy +++ b/pipelines/build/openjdk15_pipeline.groovy @@ -43,6 +43,8 @@ if (scmVars != null && configureBuild != null && buildConfigurations != null) { additionalBuildArgs, overrideFileNameVersion, cleanWorkspaceBeforeBuild, + cleanWorkspaceAfterBuild, + cleanWorkspaceBuildOutputAfterBuild, adoptBuildNumber, propagateFailures, keepTestReportDir, diff --git a/pipelines/build/openjdk16_pipeline.groovy b/pipelines/build/openjdk16_pipeline.groovy index 4ec1d347c..2b1baa616 100644 --- a/pipelines/build/openjdk16_pipeline.groovy +++ b/pipelines/build/openjdk16_pipeline.groovy @@ -43,6 +43,8 @@ if (scmVars != null && configureBuild != null && buildConfigurations != null) { additionalBuildArgs, overrideFileNameVersion, cleanWorkspaceBeforeBuild, + cleanWorkspaceAfterBuild, + cleanWorkspaceBuildOutputAfterBuild, adoptBuildNumber, propagateFailures, keepTestReportDir, diff --git a/pipelines/build/openjdk17_pipeline.groovy b/pipelines/build/openjdk17_pipeline.groovy index e506300d3..d324e99ff 100644 --- a/pipelines/build/openjdk17_pipeline.groovy +++ b/pipelines/build/openjdk17_pipeline.groovy @@ -43,6 +43,8 @@ if (scmVars != null && configureBuild != null && buildConfigurations != null) { additionalBuildArgs, overrideFileNameVersion, cleanWorkspaceBeforeBuild, + cleanWorkspaceAfterBuild, + cleanWorkspaceBuildOutputAfterBuild, adoptBuildNumber, propagateFailures, keepTestReportDir, diff --git a/pipelines/build/openjdk8_pipeline.groovy b/pipelines/build/openjdk8_pipeline.groovy index 4b99f0c76..d96ea19a1 100644 --- a/pipelines/build/openjdk8_pipeline.groovy +++ b/pipelines/build/openjdk8_pipeline.groovy @@ -43,6 +43,8 @@ if (scmVars != null && configureBuild != null && buildConfigurations != null) { additionalBuildArgs, overrideFileNameVersion, cleanWorkspaceBeforeBuild, + cleanWorkspaceAfterBuild, + cleanWorkspaceBuildOutputAfterBuild, adoptBuildNumber, propagateFailures, keepTestReportDir, diff --git a/pipelines/build/openjdk9_pipeline.groovy b/pipelines/build/openjdk9_pipeline.groovy index 92509043b..8cec904a4 100644 --- a/pipelines/build/openjdk9_pipeline.groovy +++ b/pipelines/build/openjdk9_pipeline.groovy @@ -43,6 +43,8 @@ if (scmVars != null && configureBuild != null && buildConfigurations != null) { additionalBuildArgs, overrideFileNameVersion, cleanWorkspaceBeforeBuild, + cleanWorkspaceAfterBuild, + cleanWorkspaceBuildOutputAfterBuild, adoptBuildNumber, propagateFailures, keepTestReportDir, diff --git a/pipelines/jobs/configurations/jdk11u_pipeline_config.groovy b/pipelines/jobs/configurations/jdk11u_pipeline_config.groovy index c3bf8430a..32283c86f 100644 --- a/pipelines/jobs/configurations/jdk11u_pipeline_config.groovy +++ b/pipelines/jobs/configurations/jdk11u_pipeline_config.groovy @@ -80,7 +80,8 @@ class Config11 { hotspot: 'xlc13&&aix710', openj9: 'xlc13&&aix715' ], - test : 'default' + test : 'default', + cleanWorkspaceAfterBuild: true ], s390xLinux : [ diff --git a/pipelines/jobs/configurations/jdk16_pipeline_config.groovy b/pipelines/jobs/configurations/jdk16_pipeline_config.groovy index c19e1c04e..d0a187647 100644 --- a/pipelines/jobs/configurations/jdk16_pipeline_config.groovy +++ b/pipelines/jobs/configurations/jdk16_pipeline_config.groovy @@ -110,7 +110,8 @@ class Config16 { hotspot: 'xlc16&&aix710', openj9: 'xlc16&&aix715' ], - test : 'default' + test : 'default', + cleanWorkspaceAfterBuild: true ], diff --git a/pipelines/jobs/configurations/jdk17_pipeline_config.groovy b/pipelines/jobs/configurations/jdk17_pipeline_config.groovy index 24d8c7c20..c3c5afb42 100644 --- a/pipelines/jobs/configurations/jdk17_pipeline_config.groovy +++ b/pipelines/jobs/configurations/jdk17_pipeline_config.groovy @@ -122,7 +122,8 @@ class Config17 { test : [ nightly: [], weekly : ['sanity.openjdk', 'sanity.system', 'extended.system'] - ] + ], + cleanWorkspaceAfterBuild: true ], diff --git a/pipelines/jobs/configurations/jdk8u_pipeline_config.groovy b/pipelines/jobs/configurations/jdk8u_pipeline_config.groovy index 6ae5f7321..577ed3722 100644 --- a/pipelines/jobs/configurations/jdk8u_pipeline_config.groovy +++ b/pipelines/jobs/configurations/jdk8u_pipeline_config.groovy @@ -77,7 +77,8 @@ class Config8 { hotspot: 'xlc13&&aix710', openj9: 'xlc13&&aix715' ], - test : 'default' + test : 'default', + cleanWorkspaceAfterBuild: true ], s390xLinux : [ @@ -152,4 +153,4 @@ class Config8 { } Config8 config = new Config8() -return config.buildConfigurations \ No newline at end of file +return config.buildConfigurations diff --git a/pipelines/jobs/pipeline_job_template.groovy b/pipelines/jobs/pipeline_job_template.groovy index dbcd2a81d..34a310ed1 100644 --- a/pipelines/jobs/pipeline_job_template.groovy +++ b/pipelines/jobs/pipeline_job_template.groovy @@ -9,6 +9,7 @@ propagateFailures = false runTests = true runInstaller = true runSigner = true +cleanWsBuildOutput = true // if true means this is running in the pr builder pipeline if (binding.hasVariable('PR_BUILDER')) { @@ -72,6 +73,8 @@ pipelineJob("${BUILD_FOLDER}/${JOB_NAME}") { stringParam('additionalBuildArgs', "", "Additional arguments to be passed to makejdk-any-platform.sh") stringParam('overrideFileNameVersion', "", "When forming the filename, ignore the part of the filename derived from the publishName or timestamp and override it.
For instance if you set this to 'FOO' the final file name will be of the form: OpenJDK8U-jre_ppc64le_linux_openj9_FOO.tar.gz") booleanParam('cleanWorkspaceBeforeBuild', false, "Clean out the workspace before the build") + booleanParam('cleanWorkspaceAfterBuild', false, "Clean out the workspace after the build") + booleanParam('cleanWorkspaceBuildOutputAfterBuild', cleanWsBuildOutput, "Clean out the workspace/build/src/build and workspace/target output only, after the build") booleanParam('propagateFailures', propagateFailures, "If true, a failure of ANY downstream build (but NOT test) will cause the whole build to fail") booleanParam('keepTestReportDir', false, 'If true, test report dir (including core files where generated) will be kept even when the testcase passes, failed testcases always keep the report dir. Does not apply to JUnit jobs which are always kept, eg.openjdk.') booleanParam('keepReleaseLogs', true, 'If true, "Release" type pipeline Jenkins logs will be marked as "Keep this build forever".') diff --git a/pipelines/library/src/common/IndividualBuildConfig.groovy b/pipelines/library/src/common/IndividualBuildConfig.groovy index 0b1539a7f..09772019c 100644 --- a/pipelines/library/src/common/IndividualBuildConfig.groovy +++ b/pipelines/library/src/common/IndividualBuildConfig.groovy @@ -30,6 +30,8 @@ class IndividualBuildConfig implements Serializable { final boolean ENABLE_INSTALLERS final boolean ENABLE_SIGNER final boolean CLEAN_WORKSPACE + final boolean CLEAN_WORKSPACE_AFTER + final boolean CLEAN_WORKSPACE_BUILD_OUTPUT_ONLY_AFTER IndividualBuildConfig(String json) { this(new JsonSlurper().parseText(json) as Map) @@ -70,6 +72,8 @@ class IndividualBuildConfig implements Serializable { ENABLE_INSTALLERS = map.get("ENABLE_INSTALLERS") ENABLE_SIGNER = map.get("ENABLE_SIGNER") CLEAN_WORKSPACE = map.get("CLEAN_WORKSPACE") + CLEAN_WORKSPACE_AFTER = map.get("CLEAN_WORKSPACE_AFTER") + CLEAN_WORKSPACE_BUILD_OUTPUT_ONLY_AFTER = map.get("CLEAN_WORKSPACE_BUILD_OUTPUT_ONLY_AFTER") } Map toMap() { @@ -114,7 +118,9 @@ class IndividualBuildConfig implements Serializable { ENABLE_TESTS : ENABLE_TESTS, ENABLE_INSTALLERS : ENABLE_INSTALLERS, ENABLE_SIGNER : ENABLE_SIGNER, - CLEAN_WORKSPACE : CLEAN_WORKSPACE + CLEAN_WORKSPACE : CLEAN_WORKSPACE, + CLEAN_WORKSPACE_AFTER : CLEAN_WORKSPACE_AFTER, + CLEAN_WORKSPACE_BUILD_OUTPUT_ONLY_AFTER : CLEAN_WORKSPACE_BUILD_OUTPUT_ONLY_AFTER ] } diff --git a/pipelines/src/test/groovy/IndividualBuildConfigTest.groovy b/pipelines/src/test/groovy/IndividualBuildConfigTest.groovy index 95aeb3488..5f0a96c8d 100644 --- a/pipelines/src/test/groovy/IndividualBuildConfigTest.groovy +++ b/pipelines/src/test/groovy/IndividualBuildConfigTest.groovy @@ -33,7 +33,9 @@ class IndividualBuildConfigTest { ENABLE_TESTS : true, ENABLE_INSTALLERS : true, ENABLE_SIGNER : true, - CLEAN_WORKSPACE : false] + CLEAN_WORKSPACE : false, + CLEAN_WORKSPACE_AFTER : false, + CLEAN_WORKSPACE_BUILD_OUTPUT_ONLY_AFTER : false] ) def json = config.toJson()