You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Current »

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")




  • No labels