Clearing all jobs workspaces to get free up disk space

Step-by-step guide


import hudson.model.*
  
deleteWorkspace (Hudson.instance.items)
  
def deleteWorkspace (items) {
  for (item in items) {
    if (item.class.canonicalName != null
        && item.class.canonicalName != "com.cloudbees.hudson.plugins.folder.Folder"
            && item.class.canonicalName != "org.jenkinsci.plugins.workflow.job.WorkflowJob"
            && item.class.canonicalName != "com.github.mjdetullio.jenkins.plugins.multibranch.MavenMultiBranchProject"
            && item.class.canonicalName != "org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject"
            && item.class.canonicalName != "hudson.model.ExternalJob") {
        println("Item of type "+item.class.canonicalName+" found")
        if(!item.isBuilding()) {
            println("Wiping out workspace of job "+item.name)
            item.doDoWipeOutWorkspace()
        } else {
            println("Skipping job "+item.name+", currently building")
        }
   } else if (item.class.canonicalName == "com.cloudbees.hudson.plugins.folder.Folder") {
        println("Item is folder with name "+item.name)
        deleteWorkspace(((com.cloudbees.hudson.plugins.folder.Folder) item).getItems())
    } else {
        println("Item of type "+item.class.canonicalName + " cannot have its workspace cleaned")
    }
 }
}

Eventually you can clear also all nodes/agents also:

def deleted = []
def oneDayAgo = new Date() - 1
jenkins.model.Jenkins.instance.nodes.each { hudson.model.Node node ->
  node.workspaceRoot.listDirectories().each { hudson.FilePath path ->
    def pathName = path.getRemote()
    if (path.name.startsWith(".")) {
      println "Skipping internal dir $node.displayName:$pathName"
    } else {
        def lastModified = new Date(path.lastModified())
      if (lastModified < oneDayAgo) {
        println "Deleting workspace at $node.displayName:$pathName (last modified $lastModified)"
        path.deleteRecursive()
        deleted << "$node.displayName:$pathName"
      } else {
        println "Skipping workspace at $node.displayName:$pathName (last modified $lastModified)"
      }
    }
  }
}
"Deleted workspaces: \n\t" + deleted.sort().join("\n\t")


 script to delete old builds

Here is a sample Groovy script you can use

import hudson.model.*

def jobName = "YOUR_JOB_NAME" // Replace with your job name
def daysToKeep = 20

def job = Jenkins.instance.getItem(jobName)

job.getItems().each { jobItem ->
    if (jobItem instanceof Job) {
        jobItem.getBuilds().findAll { build ->
            def buildDate = new Date(build.getTimeInMillis())
            def currentDate = new Date()
            def diffDays = (currentDate - buildDate) / (1000 * 60 * 60 * 24)
            diffDays > daysToKeep
        }.each { build ->
            println "Deleting build #${build.number} (${build.time})"
            build.delete()
        }
    }
}


Make sure to replace `"YOUR_JOB_NAME"` with the name of your multibranch pipeline job. and daysToKeep with something you want, here is 20 days

SDTDS-43819 - Getting issue details... STATUS => here it was requested