Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save bkrajendra/dccf64fd9efdc511c43f0a64a1499b88 to your computer and use it in GitHub Desktop.
Save bkrajendra/dccf64fd9efdc511c43f0a64a1499b88 to your computer and use it in GitHub Desktop.
When you delete jobs in Jenkins, the corresponding workspaces in the build slaves won't be deleted automatically. This Jenkins script will go to each slave and check if the jobs are already deleted in Jenkins master and delete the workspace.
import com.cloudbees.hudson.plugins.folder.Folder
import hudson.FilePath
import jenkins.model.Jenkins
def boolean isFolder(String name) {
def item = Jenkins.instance.getItemByFullName(name)
return item instanceof Folder
}
def deleteUnusedWorkspace(FilePath root, String path, Boolean dryRun) {
root.list().each { child ->
String fullName = path + child.name
if (isFolder(fullName)) {
deleteUnusedWorkspace(root.child(child.name), "$fullName/", dryRun)
} else {
if (Jenkins.instance.getItemByFullName(fullName) == null) {
println "Deleting: $fullName "
if (dryRun) {
// do nothing
} else {
child.deleteRecursive()
}
}
}
}
}
def cleanupWS(Boolean dryRun, String nodeType) {
if (nodeType == "s") {
for (node in Jenkins.instance.nodes) {
println "Processing $node.displayName"
def workspaceRoot = node.rootPath.child("workspace");
deleteUnusedWorkspace(workspaceRoot, "", dryRun)
}
} else {
def masterWorkspaceRoot = Jenkins.instance.rootPath.child("workspace");
deleteUnusedWorkspace(masterWorkspaceRoot, "", dryRun)
}
}
cleanupWS(true, "m") // cleanup master node, dry run
cleanupWS(true, "s") // cleanup all salve nodes, dry run
@bkrajendra
Copy link
Author

need to test

@bkrajendra
Copy link
Author

Updated for cleaning up master node. added dryRun flag

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment