Jenkins useful script console
Kill stuck build
Section titled “Kill stuck build”Jenkins.instance.getItemByFullName("<projectName").getBuildByNumber(<BuildNumber).finish(hudson.model.Result.ABORTED, new java.io.IOException("Aborting build"));
Mass disconnect ssh connections timing out
Section titled “Mass disconnect ssh connections timing out”import hudson.slaves.SlaveComputer
Jenkins.instance.computers.each { computer -> if (computer instanceof SlaveComputer && computer.name.contains("Name") && computer.isConnecting()) { println "cancelling connect attempt - set timeout to prevent this scenario ${computer.name}" computer.doDoDelete(); }}
Mass connect agent nodes
Section titled “Mass connect agent nodes”Jenkins.instance.nodes.each { node -> if (node && node.toComputer().nodeName &&! node.toComputer().online) { node.toComputer.connect(false) println(node.toComputer().nodeName) }}
remove build dirs older than 180 days
Section titled “remove build dirs older than 180 days”import jenkins.model.Jenkinsimport hudson.model.JobMIN_BUILD_LOGS = 7def sixMonthsAgo = new Date() - 180Jenkins.instance.getAllItems(Job.class).each { job -> println job.getFullDisplayName() def recent = job.builds.limit(MIN_BUILD_LOGS) def buildsToDelete = job.builds.findAll { !recent.contains(it) && ! (it.getTime() > sixMonthsAgo) } if (!buildsToDelete) { println "nothing to do" } for (build in buildsToDelete) { println "Preparing to delete: " + build + build.getTime() //["bash", "-c", "rm -r " + build.getRootDir()].execute() //build.delete() }}"done"
cleanup jenkins agent workspaces
Section titled “cleanup jenkins agent workspaces”// 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
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, new hudson.slaves.OfflineCause.ByCLI("disk cleanup")) 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) }}
Dump Jenkins creds
Section titled “Dump Jenkins creds”import java.nio.charset.StandardCharsets;def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials( com.cloudbees.plugins.credentials.Credentials.class)
for (c in creds) { println(c.id) if (c.properties.description) { println(" description: " + c.description) } if (c.properties.username) { println(" username: " + c.username) } if (c.properties.password) { println(" password: " + c.password) } if (c.properties.passphrase) { println(" passphrase: " + c.passphrase) } if (c.properties.secret) { println(" secret: " + c.secret) } if (c.properties.secretBytes) { println(" secretBytes: ") println("\n" + new String(c.secretBytes.getPlainData(), StandardCharsets.UTF_8)) println("") } if (c.properties.privateKeySource) { println(" privateKey: " + c.getPrivateKey()) } if (c.properties.apiToken) { println(" apiToken: " + c.apiToken) } if (c.properties.token) { println(" token: " + c.token) } if (c.properties.subscriptionId) { println(" subscriptionId: " + c.subscriptionId) } if (c.properties.clientId) { println(" clientId: " + c.clientId) } if (c.properties.tenant) { println(" tenant: " + c.tenant) } if (c.properties.clientSecret) { println(" clientSecret: " + c.clientSecret) } if (c.properties.plainClientSecret) { println(" plainClientSecret: " + c.plainClientSecret) } println("")}