Skip to content

Instantly share code, notes, and snippets.

@ceilfors
Last active January 17, 2025 06:44
Show Gist options
  • Save ceilfors/1400fd590632db1f51ca to your computer and use it in GitHub Desktop.
Save ceilfors/1400fd590632db1f51ca 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) {
root.list().each { child ->
String fullName = path + child.name
if (isFolder(fullName)) {
deleteUnusedWorkspace(root.child(child.name), "$fullName/")
} else {
if (Jenkins.instance.getItemByFullName(fullName) == null) {
println "Deleting: $fullName "
child.deleteRecursive()
}
}
}
}
for (node in Jenkins.instance.nodes) {
println "Processing $node.displayName"
def workspaceRoot = node.rootPath.child("workspace");
deleteUnusedWorkspace(workspaceRoot, "")
}
@HauruShiro
Copy link

HauruShiro commented Sep 9, 2024

Hey from where do we run this script, and how to run. Im new to devops, plz help.

Or you can just type : https://jenkins.url.lan/script ( add script at the end of url )

You'll arrive in console script

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