Skip to content

Commit

Permalink
Separate clean workspace function
Browse files Browse the repository at this point in the history
Signed-off-by: Stewart X Addison <[email protected]>
  • Loading branch information
sxa committed Oct 10, 2024
1 parent 8501034 commit f4e056b
Showing 1 changed file with 67 additions and 47 deletions.
114 changes: 67 additions & 47 deletions pipelines/build/common/openjdk_build_pipeline.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -1624,7 +1624,49 @@ class Build {
} // context.stage
}

def postBuildWSclean(
cleanWorkspaceAfter,
cleanWorkspaceBuildOutputAfter
) {
// post-build workspace clean:
if (cleanWorkspaceAfter || cleanWorkspaceBuildOutputAfter) {
try {
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 non-hidden files: ' + context.WORKSPACE + '/*'
context.sh(script: 'rm -rf ' + context.WORKSPACE + '/*')

// Clean remaining hidden files using cleanWs
try {
context.println 'Cleaning workspace hidden files using cleanWs: ' + context.WORKSPACE
context.cleanWs notFailBuild: true, disableDeferredWipeout: true, deleteDirs: true
} catch (e) {
context.println "Failed to clean ${e}"
}
} else if (cleanWorkspaceBuildOutputAfter) {
context.println 'Cleaning workspace build output files under ' + context.WORKSPACE
batOrSh('rm -rf ' + context.WORKSPACE + '/workspace/build/src/build ' + context.WORKSPACE + '/workspace/target ' + context.WORKSPACE + '/workspace/build/devkit ' + context.WORKSPACE + '/workspace/build/straceOutput')
}
} else {
context.println 'Warning: Unable to clean workspace as context.WORKSPACE is null/empty'
}
}
} catch (FlowInterruptedException e) {
// Set Github Commit Status
if (env.JOB_NAME.contains('pr-tester')) {
updateGithubCommitStatus('FAILED', 'Build FAILED')
}
throw new Exception("[ERROR] AIX clean workspace timeout (${buildTimeouts.AIX_CLEAN_TIMEOUT} HOURS) has been reached. Exiting...")
}
}
}

def buildScriptsAssemble(
cleanWorkspaceAfter,
cleanWorkspaceBuildOutputAfter,
buildConfigEnvVars
) {
def build_path
Expand All @@ -1644,9 +1686,7 @@ def buildScriptsAssemble(
// SXAEC: Still TBC on this to determine if something fails without it
// Ref https://github.com/adoptium/infrastructure/issues/3723
// Fails to unstash even in non-docker case without the chmod e.g. windbld#840
context.bat('c:\\cygwin64\\bin\\find /cygdrive/c/workspace -name public_suffix_list.dat -ls')
context.bat('chmod -R a+rwX /cygdrive/c/workspace/openjdk-build/workspace/build/src/build & echo Done & exit 0')
context.bat('c:\\cygwin64\\bin\\find /cygdrive/c/workspace -name public_suffix_list.dat -ls')
context.bat('chmod -R a+rwX ' + '/cygdrive/c/workspace/openjdk-build/workspace/build/src/build/windows-x86_64-server-release')
}
// Restore signed JMODs
context.unstash 'signed_jmods'
Expand Down Expand Up @@ -1713,6 +1753,7 @@ def buildScriptsAssemble(
}
throw new Exception("[ERROR] Build archive timeout (${buildTimeouts.BUILD_ARCHIVE_TIMEOUT} HOURS) has been reached. Exiting...")
}
postBuildWSclean(cleanWorkspaceAfter, cleanWorkspaceBuildOutputAfter)
} // context.stage('assemble')
} // End of buildScriptsAssemble() 1643-1765

Expand All @@ -1724,6 +1765,8 @@ def buildScriptsAssemble(

def buildScripts(
cleanWorkspace,
cleanWorkspaceAfter,
cleanWorkspaceOutputAfter,
useAdoptShellScripts,
enableSigner,
buildConfigEnvVars
Expand Down Expand Up @@ -1967,7 +2010,9 @@ def buildScriptsAssemble(
}
throw new Exception("[ERROR] Build archive timeout (${buildTimeouts.BUILD_ARCHIVE_TIMEOUT} HOURS) has been reached. Exiting...")
}

if ( !enableSigner ) { // Don't clean if we need the workspace for the later assemble phase
postBuildWSclean(cleanWorkspaceAfter, cleanWorkspaceBuildOutputAfter)
}
// Set Github Commit Status
if (env.JOB_NAME.contains('pr-tester')) {
updateGithubCommitStatus('SUCCESS', 'Build PASSED')
Expand Down Expand Up @@ -2056,7 +2101,6 @@ def buildScriptsAssemble(
context.currentBuild.description = tmpDesc + "<a href=${context.JENKINS_URL}computer/${context.NODE_NAME}>${context.NODE_NAME}</a>"
}


/*
Main function. This is what is executed remotely via the helper file kick_off_build.groovy, which is in turn executed by the downstream jobs.
Running in downstream build job jdk-*-*-* called by kick_off_build.groovy
Expand Down Expand Up @@ -2207,8 +2251,10 @@ def buildScriptsAssemble(
}

context.docker.build("build-image", "--build-arg image=${buildConfig.DOCKER_IMAGE} -f ${buildConfig.DOCKER_FILE} .").inside(buildConfig.DOCKER_ARGS) {
buildScripts(
buildScripts(
cleanWorkspace,
cleanWorkspaceAfter,
cleanWorkspaceBuildOutputAfter,
useAdoptShellScripts,
enableSigner,
envVars
Expand All @@ -2233,6 +2279,8 @@ def buildScriptsAssemble(
context.docker.image(buildConfig.DOCKER_IMAGE).inside(buildConfig.DOCKER_ARGS+" "+dockerRunArg) {
buildScripts(
cleanWorkspace,
cleanWorkspaceAfter,
cleanWorkspaceBuildOutputAfter,
useAdoptShellScripts,
enableSigner,
envVars
Expand All @@ -2244,6 +2292,8 @@ def buildScriptsAssemble(
context.docker.image(buildConfig.DOCKER_IMAGE).inside(buildConfig.DOCKER_ARGS+" "+dockerRunArg) {
buildScripts(
cleanWorkspace,
cleanWorkspaceAfter,
cleanWorkspaceBuildOutputAfter,
useAdoptShellScripts,
enableSigner,
envVars
Expand All @@ -2257,8 +2307,10 @@ def buildScriptsAssemble(
context.ws(workspace) {
context.println "Signing with non-default workspace location ${workspace}"
context.println "openjdk_build_pipeline: running assemble phase (invocation 1)"
context.docker.image(buildConfig.DOCKER_IMAGE).inside(buildConfig.DOCKER_ARGS+" "+dockerRunArg) {
context.docker.image(buildConfig.DOCKER_IMAGE).inside(buildConfig.DOCKER_ARGS+" "+dockerRunArg) {
buildScriptsAssemble(
cleanWorkspaceAfter,
cleanWorkspaceBuildOutputAfter,
envVars
)
}
Expand Down Expand Up @@ -2288,6 +2340,8 @@ def buildScriptsAssemble(
context.ws(workspace) {
buildScripts(
cleanWorkspace,
cleanWorkspaceAfter,
cleanWorkspaceBuildOutputAfter,
useAdoptShellScripts,
enableSigner,
envVars
Expand All @@ -2296,13 +2350,17 @@ def buildScriptsAssemble(
buildScriptsEclipseSigner()
context.println "openjdk_build_pipeline: running assemble phase (invocation 2)"
buildScriptsAssemble(
cleanWorkspaceAfter,
cleanWorkspaceBuildOutputAfter,
envVars
)
}
}
} else { // Non-windows, non-docker
buildScripts(
cleanWorkspace,
cleanWorkspaceAfter,
cleanWorkspaceBuildOutputAfter,
useAdoptShellScripts,
enableSigner,
envVars
Expand All @@ -2311,6 +2369,8 @@ def buildScriptsAssemble(
buildScriptsEclipseSigner()
context.println "openjdk_build_pipeline: running assemble phase (invocation 3)"
buildScriptsAssemble(
cleanWorkspaceAfter,
cleanWorkspaceBuildOutputAfter,
envVars
)
}
Expand All @@ -2320,46 +2380,6 @@ def buildScriptsAssemble(
}
}

// post-build workspace clean:
context.node(label) {
if (cleanWorkspaceAfter || cleanWorkspaceBuildOutputAfter) {
try {
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 non-hidden files: ' + context.WORKSPACE + '/*'
context.sh(script: 'rm -rf ' + context.WORKSPACE + '/*')

// Clean remaining hidden files using cleanWs
try {
context.println 'Cleaning workspace hidden files using cleanWs: ' + context.WORKSPACE
context.cleanWs notFailBuild: true, disableDeferredWipeout: true, deleteDirs: true
} catch (e) {
context.println "Failed to clean ${e}"
}
} else if (cleanWorkspaceBuildOutputAfter) {
if ( enableSigner ) {
context.println 'ERROR? ENABLE_SIGNER and CLEAN_WORKSPACE_AFTER_BUILD both set'
}
context.println 'Cleaning workspace build output files under ' + context.WORKSPACE
batOrSh('rm -rf ' + context.WORKSPACE + '/workspace/build/src/build ' + context.WORKSPACE + '/workspace/target ' + context.WORKSPACE + '/workspace/build/devkit ' + context.WORKSPACE + '/workspace/build/straceOutput')
}
} else {
context.println 'Warning: Unable to clean workspace as context.WORKSPACE is null/empty'
}
}
} catch (FlowInterruptedException e) {
// Set Github Commit Status
if (env.JOB_NAME.contains('pr-tester')) {
updateGithubCommitStatus('FAILED', 'Build FAILED')
}
throw new Exception("[ERROR] AIX clean workspace timeout (${buildTimeouts.AIX_CLEAN_TIMEOUT} HOURS) has been reached. Exiting...")
}
}
}

// Sign and archive jobs if needed
if (enableSigner) {
try {
Expand Down

0 comments on commit f4e056b

Please sign in to comment.