Jenkins: Is there any way to cleanup Jenkins workspace?

JenkinsJenkins PluginsAccurev

Jenkins Problem Overview


How can I cleanup the workspace in Jenkins? I am using AccuRev as version control tool.

I created freestyle projects in Jenkins.

Jenkins Solutions


Solution 1 - Jenkins

There is a way to cleanup workspace in Jenkins. You can clean up the workspace before build or after build.

First, install Workspace Cleanup Plugin.

To clean up the workspace before build: Under Build Environment, check the box that says Delete workspace before build starts.

To clean up the workspace after the build: Under the heading Post-build Actions select Delete workspace when build is done from the Add Post-build Actions drop down menu.

Solution 2 - Jenkins

If you want to manually clean it up, for me with my version of jenkins (didn't appear to need an extra plugin installed, but who knows), there is a "workspace" link on the left column, click on your project, then on "workspace", then a "Wipe out current workspace" link appears beneath it on the left hand side column. screenshot

Solution 3 - Jenkins

Beside above solutions, there is a more "COMMON" way - directly delete the largest space consumer from Linux machine. You can follow the below steps:

  1. Login to Jenkins machine (Putty) enter image description here
  2. cd to the Jenkins installation path

> Using ls -lart to list out hidden folder also, normally jenkin > installation is placed in .jenkins/ folder > > [xxxxx ~]$ ls -lart > > drwxrwxr-x 12 xxxx 4096 Feb 8 02:08 .jenkins/

  1. list out the folders spaces

> Use df -h to show Disk space in high level > > du -sh ./*/ to list out total memory for each subfolder in current > path. > > du -a /etc/ | sort -n -r | head -n 10 will list top 10 directories > eating disk space in /etc/

  1. Delete old build or other large size folder

> Normally ./job/ folder or ./workspace/ folder can be the largest > folder. Please go inside and delete base on you need (DO NOT delete entire folder). > > rm -rf theFolderToDelete

enter image description here

Solution 4 - Jenkins

IMPORTANT: It is safe to remove the workspace for a given Jenkins job as long as the job is not currently running!

NOTE: I am assuming your $JENKINS_HOME is set to the default: /var/jenkins_home.

Clean up one workspace

rm -rf /var/jenkins_home/workspaces/<workspace>

Clean up all workspaces

rm -rf /var/jenkins_home/workspaces/*

Clean up all workspaces with a few exceptions

This one uses grep to create a whitelist:

ls /var/jenkins_home/workspace \ 
  | grep -v -E '(job-to-skip|another-job-to-skip)$' \
  | xargs -I {} rm -rf /var/jenkins_home/workspace/{}
Clean up 10 largest workspaces

This one uses du and sort to list workspaces in order of largest to smallest. Then, it uses head to grab the first 10:

du -d 1 /var/jenkins_home/workspace \
  | sort -n -r \
  | head -n 10 \
  | xargs -I {} rm -rf /var/jenkins_home/workspace/{}

Solution 5 - Jenkins

Workspace Cleanup Plugin

In Jenkins file add

cleanWs()

This will delete the workspace after the build is complete

Solution 6 - Jenkins

You can run the below script in the Manage JenkinsScripts Console for deleting the workspaces of all the jobs at one shot. We did this to clean up space on the file system.

import hudson.model.*
// For each project
for(item in Hudson.instance.items) {
  // check that job is not building
  if(!item.isBuilding()) {
    println("Wiping out workspace of job "+item.name)
    item.doDoWipeOutWorkspace()
  }
  else {
    println("Skipping job "+item.name+", currently building")
  }
}

Solution 7 - Jenkins

If you want to just remove one dir (or file) you can use Groovy and Manage Jenkins → Scripts Console run a script which removes it.

For example, you can look at the files with:

dh = new File('./bitnami/jenkins/jenkins_home/workspace/jobname/folder')
dh.eachFile {
  println(it)
}

And then, when you have the folder you want to delete in dh, you could simply append the next code:

dh.deleteDir()

And it will be deleted.

Note: The path shown in the example is for a Bitnami Jenkins installation, yours could be different.

Solution 8 - Jenkins

not allowed to comment, therefore:

The answer from Upen works just fine, but not if you have Jenkins Pipeline Jobs mixed with Freestyle Jobs. There is no such Method as DoWipeWorkspace on Pipeline Jobs. So I modified the Script in order to skip those:

import hudson.model.*
import org.jenkinsci.plugins.workflow.job.WorkflowJob

// For each project
for(item in Hudson.instance.items) {
  // check that job is not building
  if(!item.isBuilding() && !(item instanceof WorkflowJob))
  {
    println("Wiping out workspace of job "+item.name)
    item.doDoWipeOutWorkspace()
  }
  else {
    println("Skipping job "+item.name+", currently building")
  }
}

you could also filter by Job Names if required: item.getDisplayName().toLowerCase().contains("release")

Solution 9 - Jenkins

Assuming the question is about cleaning the workspace of the current job, you can run:

test -n "$WORKSPACE" && rm -rf "$WORKSPACE"/*

Solution 10 - Jenkins

There is an option to do it. Configure -> Post-build Actions
The option comes by default at least in Jenkins version 2.236

Solution 11 - Jenkins

You will need to install this plugin before the options mentioned above will appear

Workspace Cleanup Plugin

This plugin add the check box to all job configs to allow you to delete the whole workspace before any steps (inc source control) are run

This is useful to make sure you always start from a known point to guarantee how you build will run

Solution 12 - Jenkins

For those, who have builds within Docker under root user, following method may help:

def cleanupWorkspaceAsRoot() {
  log.notice "Removing workspace contents: $WORKSPACE !"
  docker.image('alpine').inside('-u root --env WORKSPACE') { // use docker instead of sudo // TODO make ALL docker builds work as non-ROOT, so there is no root-owned files
    sh 'test -n "$WORKSPACE" && rm -rf "$WORKSPACE"/*'
  }
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionKarthikView Question on Stackoverflow
Solution 1 - JenkinsNagendra SinghView Answer on Stackoverflow
Solution 2 - JenkinsrogerdpackView Answer on Stackoverflow
Solution 3 - JenkinsKevinView Answer on Stackoverflow
Solution 4 - JenkinsSherwood CallawayView Answer on Stackoverflow
Solution 5 - JenkinswaranlogeshView Answer on Stackoverflow
Solution 6 - JenkinsUpenView Answer on Stackoverflow
Solution 7 - JenkinsPhoneixSView Answer on Stackoverflow
Solution 8 - JenkinsachschneidView Answer on Stackoverflow
Solution 9 - JenkinsalebView Answer on Stackoverflow
Solution 10 - JenkinsfranciscorodeView Answer on Stackoverflow
Solution 11 - JenkinsKeirView Answer on Stackoverflow
Solution 12 - JenkinsAleksejs SpiridonovsView Answer on Stackoverflow