-
-
Save danechitoaie/387abcc0af6ff5f3fd1a0ddbc2690cfa to your computer and use it in GitHub Desktop.
Revisions
-
EvilBeaver revised this gist
Oct 25, 2017 . 2 changed files with 64 additions and 56 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,64 @@ // Check if a slave has < 10 GB of free space, wipe out workspaces if it does import hudson.model.*; import hudson.util.*; import jenkins.model.*; import hudson.FilePath.FileCallable; import hudson.slaves.OfflineCause; import hudson.node_monitors.*; def performCleanup(def node, def items) { for (item in items) { jobName = item.getFullDisplayName() println("Cleaning " + jobName) if(item instanceof com.cloudbees.hudson.plugins.folder.AbstractFolder) { performCleanup(node, item.items) continue } if (item.isBuilding()) { println(".. job " + jobName + " is currently running, skipped") continue } println(".. wiping out workspaces of job " + jobName) workspacePath = node.getWorkspaceFor(item) if (workspacePath == null) { println(".... could not get workspace path") continue } println(".... workspace = " + workspacePath) pathAsString = workspacePath.getRemote() if (workspacePath.exists()) { workspacePath.deleteRecursive() println(".... deleted from location " + pathAsString) } else { println(".... nothing to delete at " + pathAsString) } } } for (node in Jenkins.instance.nodes) { computer = node.toComputer() if (computer.getChannel() == null) continue rootPath = node.getRootPath() size = DiskSpaceMonitor.DESCRIPTOR.get(computer).size roundedSize = size / (1024 * 1024 * 1024) as int println("node: " + node.getDisplayName() + ", free space: " + roundedSize + "GB") computer.setTemporarilyOffline(true, new hudson.slaves.OfflineCause.ByCLI("disk cleanup")) performCleanup(node, Jenkins.instance.items) computer.setTemporarilyOffline(false, null) } This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,56 +0,0 @@ -
rb2k revised this gist
Jan 11, 2014 . 1 changed file with 3 additions and 18 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,27 +1,12 @@ // Check if a slave has < 10 GB of free space, wipe out workspaces if it does import hudson.model.*; import hudson.util.*; import jenkins.model.*; import hudson.FilePath.FileCallable; import hudson.slaves.OfflineCause; import hudson.node_monitors.*; for (node in Jenkins.instance.nodes) { computer = node.toComputer() if (computer.getChannel() == null) continue @@ -32,7 +17,7 @@ for (node in Jenkins.instance.nodes) { println("node: " + node.getDisplayName() + ", free space: " + roundedSize + "GB") if (roundedSize < 10) { computer.setTemporarilyOffline(true, new hudson.slaves.OfflineCause.ByCLI("disk cleanup")) for (item in Jenkins.instance.items) { jobName = item.getFullDisplayName() -
rb2k created this gist
Jan 11, 2014 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,71 @@ import hudson.model.*; import hudson.util.*; import jenkins.model.*; import hudson.FilePath.FileCallable; import hudson.slaves.OfflineCause; import hudson.slaves.OfflineCause.SimpleOfflineCause import hudson.node_monitors.*; class OfflineDiskCleanupMessage extends org.jvnet.localizer.Localizable { def message OfflineDiskCleanupMessage() { super(null, null, []) this.message = "disk cleanup" } String toString() { this.message } String toString(java.util.Locale l) { toString() } } for (node in Jenkins.instance.nodes) { computer = node.toComputer() if (computer.getChannel() == null) continue rootPath = node.getRootPath() size = DiskSpaceMonitor.DESCRIPTOR.get(computer).size roundedSize = size / (1024 * 1024 * 1024) as int println("node: " + node.getDisplayName() + ", free space: " + roundedSize + "GB") if (roundedSize < 10) { computer.setTemporarilyOffline(true, SimpleOfflineCause.create(new OfflineDiskCleanupMessage())) for (item in Jenkins.instance.items) { jobName = item.getFullDisplayName() if (item.isBuilding()) { println(".. job " + jobName + " is currently running, skipped") continue } println(".. wiping out workspaces of job " + jobName) workspacePath = node.getWorkspaceFor(item) if (workspacePath == null) { println(".... could not get workspace path") continue } println(".... workspace = " + workspacePath) customWorkspace = item.getCustomWorkspace() if (customWorkspace != null) { workspacePath = node.getRootPath().child(customWorkspace) println(".... custom workspace = " + workspacePath) } pathAsString = workspacePath.getRemote() if (workspacePath.exists()) { workspacePath.deleteRecursive() println(".... deleted from location " + pathAsString) } else { println(".... nothing to delete at " + pathAsString) } } computer.setTemporarilyOffline(false, null) } }