reference:
javadoc
- org.jenkinsci.plugins.workflow.job.WorkflowJob
- hudson.model.AbstractProject
- com.cloudbees.hudson.plugins.folder.Folder
source code:
sample code:
list items
get name and classes
jenkins.model.Jenkins.instance.getAllItems( Job.class ).each {
println it.name + " -> " + it.fullName + ' ~> ' + it.class
}
- result
marslo - class org.jenkinsci.plugins.workflow.job.WorkflowJob fs - class hudson.model.FreeStyleProject
list all jobs and folders
jenkins.model.Jenkins.instance.getAllItems( AbstractItem.class ).each {
println(it.fullName)
}
- result:
marslo/marslo marslo/fs
list all WorkflowJob
import org.jenkinsci.plugins.workflow.job.WorkflowJob
jenkins.model.Jenkins.instance.getAllItems( WorkflowJob.class ).each {
println it.fullName
}
list all AbstractProject
Abstract Project: freestyle, maven, etc...
jenkins.model.Jenkins.instance.getAllItems( AbstractProject.class ).each {
println it.fullName
}
list all folders
import com.cloudbees.hudson.plugins.folder.Folder
jenkins.model.Jenkins.instance.getAllItems( Folder.class ).each {
println it.fullName + ' ~> ' + it.getClass()
}
list all disabled projects/jobs
jenkins.model.Jenkins.instance
.getAllItems( Job.class )
.findAll { it.disabled }
.collect { it.fullName }
or
jenkins.model.Jenkins.instance .getAllItems(jenkins.model.ParameterizedJobMixIn.ParameterizedJob.class) .findAll{ it.disabled } .each { println it.fullName }or
jenkins.model.Jenkins.instance .getAllItems(jenkins.model.ParameterizedJobMixIn.ParameterizedJob.class) .findAll{ it.disabled } .collect { it.fullName }
list inactive jobs
[!NOTE] List jobs haven't been built in 6 months
final long CURRENT_TIME = System.currentTimeMillis()
final long BENCH_MARK = 6*30*24*60*60
jenkins.model.Jenkins.instance.getAllItems( Job.class ).collect { project ->
project.getLastBuild()
}.findAll { build ->
build && ( CURRENT_TIME - build.startTimeInMillis ) / 1000 > BENCH_MARK
}
list cron jobs
[!NOTE|label:references:]
list all cron jobs
import hudson.triggers.TimerTrigger
jenkins.model.Jenkins j = jenkins.model.Jenkins.instance
hudson.model.Descriptor cron = j.getDescriptor( TimerTrigger )
println j.getAllItems(Job).findAll { Job job ->
job?.triggers?.get(cron)
}.collectEntries { Job job ->
[ (job.fullName): job.triggers.get(cron).spec ]
}.collect {
"${it.key.padRight(30)}: ${it.value}"
}.join('\n')
disable timer trigger in freestyle only
import hudson.model.*
import hudson.triggers.*
TriggerDescriptor TIMER_TRIGGER_DESCRIPTOR = Hudson.instance.getDescriptorOrDie( TimerTrigger.class )
jenkins.model.Jenkins.instance.getAllItems(Job).findAll { item ->
item.getTriggers().get( TIMER_TRIGGER_DESCRIPTOR )
}.each { item ->
if ( item instanceof hudson.model.FreeStyleProject ) {
item.removeTrigger(TIMER_TRIGGER_DESCRIPTOR)
println(item.fullName + " Build periodically disabled");
} else {
println(item.fullName + " Build periodically remains enabled; not as Freestyle project");
}
}
"DONE"
or
import hudson.model.* import hudson.triggers.* TriggerDescriptor TIMER_TRIGGER_DESCRIPTOR = Hudson.instance.getDescriptorOrDie( TimerTrigger.class ) for( item in jenkins.model.Jenkins.instance.getAllItems(Job) ) { def timertrigger = item.getTriggers().get( TIMER_TRIGGER_DESCRIPTOR ) if ( timertrigger ) { if (item.class.canonicalName == "hudson.model.FreeStyleProject") { item.removeTrigger(TIMER_TRIGGER_DESCRIPTOR) println(item.name + " Build periodically disabled"); } else { println(item.name + " Build periodically remains enabled; not as Freestyle project"); } } }example 2:
jenkins.model.Jenkins.instance.getAllItems(Job).each { def jobBuilds=it.getBuilds() // Check the last build only jobBuilds[0].each { build -> def runningSince = groovy.time.TimeCategory.minus( new Date(), build.getTime() ) def currentStatus = build.buildStatusSummary.message def cause = build.getCauses()[0] //we keep the cause //triggered by a user def user = cause instanceof Cause.UserIdCause? cause.getUserId():null; if( !user ) { println "[AUTOMATION] ${build}" } else { println "[${user}] ${build}" } } } return
get pipeline definitions
[!TIP|label:references:]
get pipeline scm definition
[!TIP]
import org.jenkinsci.plugins.workflow.job.WorkflowJob
jenkins.model.Jenkins.instance.getAllItems( WorkflowJob.class ).findAll{
it.definition instanceof org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition
}.each {
println it.fullName.toString().padRight(30) +
( it.definition?.scm?.branches?.join() ?: '' ).padRight(20) +
( it?.definition?.scriptPath ?: '' ).padRight(30) +
it.definition?.scm?.userRemoteConfigs.collect { it.credentialsId }.join().padRight(30) +
it.definition?.scm?.repositories?.collect{ it.getURIs() }?.flatten()?.join()
}
"DONE"
-- result --
marslo/sandbox/sandbox */main jenkinsfile/sandbox GIT_SSH_CREDENTIAL git://github.com:marslo/pipelines
marslo/sandbox/dump */dev jenkinsfile/dump GIT_SSH_CREDENTIAL git://github.com:marslo/pipelines
...
get pipeline scriptPath
[!TIP]
import org.jenkinsci.plugins.workflow.job.WorkflowJob
jenkins.model.Jenkins.instance.getAllItems(WorkflowJob.class).findAll{
it.definition instanceof org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition
}.each {
println it.fullName.toString().padRight(30) + ' ~> ' + it?.definition?.getScriptPath()
}
"DONE"
-- result --
marslo/sandbox/sandbox ~> jenkins/jenkinsfile/sandbox.Jenkinsfile
marlso/sandbox/dump ~> jenkins/jenkinsfile/dump.Jenkinsfile
...
get typical scm
[!NOTE]
jenkins.model.Jenkins.instance.getAllItems( hudson.model.Job.class ).findAll {
it.hasProperty( 'typicalSCM' ) &&
it.typicalSCM instanceof hudson.plugins.git.GitSCM
}.each { job ->
println job.fullName.padRight(40) + ' : ' +
( job.typicalSCM.branches?.join() ?: '' ).padRight(40) +
job.typicalSCM.userRemoteConfigs?.collect { it.credentialsId }.join().padRight(30) +
job.typicalSCM.repositories?.collect{ it.getURIs() }?.flatten()?.join()
}
"DONE"
get pipeline scm branch
import org.jenkinsci.plugins.workflow.job.WorkflowJob
String branch = 'develop'
jenkins.model.Jenkins.instance.getAllItems(WorkflowJob.class).findAll{
it.definition instanceof org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition
}.findAll {
! ( it.definition?.scm instanceof hudson.scm.NullSCM ) &&
! it.definition?.scm?.branches?.any{ it.getName().contains(branch) }
}.each {
println it.fullName.toString().padRight(50) + ' : ' +
it.definition?.scm?.branches?.collect{ it.getName() }?.join(', ')
}
"DONE"
-- result --
$ ssh jenkins.domain.com groovy =< scmBranchPath.groovy
marslo/sandbox/sandbox : refs/heads/sandbox/marslo
marslo/sandbox/dump : refs/heads/utility
get all SCMs
[!NOTE]
- get all SCM definitions via
getSCMs, including
- Libraries
- last builds, including all stages calls
GitSCMgetSCMs
getLastSuccessfulBuild?:getLastCompletedBuild?:definedSCMs
jenkins.model.Jenkins.instance.getAllItems( Job.class ).findAll {
it.SCMs &&
it.SCMs.any { scm -> scm instanceof hudson.plugins.git.GitSCM }
}.each { job ->
println job.fullName.padRight(50) + ':'
job.SCMs.branches.eachWithIndex { scm, idx ->
println '\t - ' + job.SCMs.branches[idx].join().padRight(45) +
job.SCMs.userRemoteConfigs[idx].credentialsId.join().padRight(30) +
job.SCMs.repositories[idx].collect { it.getURIs() }.flatten().join()
}
}
"DONE"
or without lastBuild
jenkins.model.Jenkins.instance.getAllItems( Job.class ).findAll { it.hasProperty( 'typicalSCM' ) && it.typicalSCM instanceof hudson.plugins.git.GitSCM }.each { job -> println job.fullName.padRight(40) + ' : ' + ( job.typicalSCM.branches?.join() ?: '' ).padRight(40) + job.typicalSCM.userRemoteConfigs?.collect { it.credentialsId }.join().padRight(30) + job.typicalSCM.repositories?.collect{ it.getURIs() }?.flatten()?.join() } "DONE" -- result -- marslo/whitebox/whitebox : main ED25519_SSH_CREDENTIAL git://github.com:marslo/pipelines marslo/sandbox/dump : sandbox/dump ED25519_SSH_CREDENTIAL git://github.com:marslo/pipelinesor
jenkins.model.Jenkins.instance.getAllItems( Job.class ).findAll { it.hasProperty( 'typicalSCM' ) && it.typicalSCM instanceof hudson.plugins.git.GitSCM }.each { job -> println job.fullName.padRight(50) + ':' + '\n\t - ' + job.typicalSCM.branches.join() + '\n\t - ' + job.typicalSCM.userRemoteConfigs.collect { it.credentialsId }.join() + '\n\t - ' + job.typicalSCM.repositories?.collect{ it.getURIs() }?.flatten()?.join() } "DONE" -- result -- marslo/whitebox/whitebox : - main - ED25519_SSH_CREDENTIAL - git://github.com:marslo/pipelines marslo/sandbox/dump : - sandbox/dump - ED25519_SSH_CREDENTIAL - git://github.com:marslo/pipelines
check pipeline isn't get from particular branch
[!TIP]
import org.jenkinsci.plugins.workflow.job.WorkflowJob
String branch = 'develop'
jenkins.model.Jenkins.instance.getAllItems(WorkflowJob.class).findAll{
it.definition instanceof org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition &&
! ( it.definition.scm instanceof hudson.scm.NullSCM )
}.findAll {
! it.definition?.scm?.branches?.any{ it.getName().contains(branch) }
}.each {
println it.fullName.toString().padRight(50) + ' : ' +
it.definition?.scm?.branches?.collect{ it.getName() }?.join(', ')
}
"DONE"
get pipeline bare script
[!TIP]
import org.jenkinsci.plugins.workflow.job.WorkflowJob
jenkins.model.Jenkins.instance.getAllItems(WorkflowJob.class).findAll{
it.definition instanceof org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition
}.each {
println it.fullName.toString().padRight(30) + ' ~> ' + it?.definition?.getScript()
}
"DONE"
get particular job status
def job = jenkins.model.Jenkins.instance.getItemByFullName('<group>/<name>')
println """
Last success : ${job.getLastSuccessfulBuild()}
All builds : ${job.getBuilds().collect{ it.getNumber() }}
Last build : ${job.getLastBuild()}
Is building : ${job.isBuilding()}
"""
list properties
[!NOTE] Java Code Examples for jenkins.model.Jenkins#getItemByFullName()
def job = jenkins.model.Jenkins.instance.getItemByFullName('<group>/<name>')
println """
job.getClass() : ${job.getClass()}
job.isBuildable() : ${job.isBuildable()}
job.getFirstBuild() : ${job.getFirstBuild()}
job.getACL() : ${job.getACL()}
"======================="
job.getBuilds() : ${job.getBuilds()}
"""
get logRotator
import org.jenkinsci.plugins.workflow.job.WorkflowJob
import hudson.tasks.LogRotator
String JOB_PATTERN = 'pattern'
jenkins.model.Jenkins.instance.getAllItems(WorkflowJob.class).findAll{
it.fullName.startsWith( JOB_PATTERN ) && it.buildDiscarder
}.each { job ->
LogRotator discarder = job.buildDiscarder
println job.fullName.toString().padRight(30) + ' : ' +
"builds=(${discarder.daysToKeep} days, ${discarder.numToKeep} total) " +
"artifacts=(${discarder.artifactDaysToKeep} days, ${discarder.artifactNumToKeep} total)"
}
"DONE"
show logRotator via pattern
List<String> projects = [ 'project' ]
jenkins.model.Jenkins.instance.getAllItems(Job.class).findAll {
projects.any { p -> it.fullName.startsWith(p) }
}.each {
println """
>> ${it.fullName} :
artifactDaysToKeep : ${it.logRotator?.artifactDaysToKeep ?: '' }
artifactDaysToKeepStr : ${it.logRotator?.artifactDaysToKeepStr ?: '' }
artifactNumToKeep : ${it.logRotator?.artifactNumToKeep ?: '' }
artifactNumToKeepStr : ${it.logRotator?.artifactNumToKeepStr ?: '' }
daysToKeep : ${it.logRotator?.daysToKeep ?: '' }
daysToKeepStr : ${it.logRotator?.daysToKeepStr ?: '' }
numToKeep : ${it.logRotator?.numToKeep ?: '' }
numToKeepStr : ${it.logRotator?.numToKeepStr ?: '' }
--------------------------------------------------------------------------------
getArtifactDaysToKeep() : ${it.logRotator?.getArtifactDaysToKeep() ?: '' }
getArtifactDaysToKeepStr() : ${it.logRotator?.getArtifactDaysToKeepStr() ?: '' }
getArtifactNumToKeep() : ${it.logRotator?.getArtifactNumToKeep() ?: '' }
getArtifactNumToKeepStr() : ${it.logRotator?.getArtifactNumToKeepStr() ?: '' }
getDaysToKeep() : ${it.logRotator?.getDaysToKeep() ?: '' }
getDaysToKeepStr() : ${it.logRotator?.getDaysToKeepStr() ?: '' }
getNumToKeep() : ${it.logRotator?.getNumToKeep() ?: '' }
getNumToKeepStr() : ${it.logRotator?.getNumToKeepStr() ?: '' }
"""
}
set logrotator
[!NOTE|label:references:]
- scripts:
update pipeline definition
[!NOTE]
update SCM definition
[!NOTE]
without output
#!/usr/bin/env groovy
import hudson.plugins.git.GitSCM
import hudson.plugins.git.UserRemoteConfig
import org.jenkinsci.plugins.workflow.job.WorkflowJob
import org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition
import com.cloudbees.plugins.credentials.common.StandardCredentials
import com.cloudbees.plugins.credentials.CredentialsProvider
String newCredId = 'ED25519_SSH_CREDENTIAL'
if ( CredentialsProvider.lookupCredentials( StandardCredentials.class, jenkins.model.Jenkins.instance)
.any { newCredId == it.id }
) {
jenkins.model.Jenkins.instance.getAllItems( WorkflowJob.class ).findAll {
it.definition instanceof org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition &&
! it.definition?.scm?.userRemoteConfigs.collect { it.credentialsId }.contains( newCredId )
}.each { job ->
GitSCM orgScm = job.definition?.scm
Boolean orgLightweight = job.definition?.lightweight
List<UserRemoteConfig> newUserRemoteConfigs = orgScm.userRemoteConfigs.collect {
newUrl = 'ssh://' + it.url.split('ssh://').last().split('@').last()
new UserRemoteConfig( newUrl, it.name, it.refspec, newCredId )
}
GitSCM newScm = new GitSCM( newUserRemoteConfigs, orgScm.branches, orgScm.doGenerateSubmoduleConfigurations,
orgScm.submoduleCfg, orgScm.browser, orgScm.gitTool, orgScm.extensions
)
CpsScmFlowDefinition flowDefinition = new CpsScmFlowDefinition( newScm, job.definition.scriptPath )
job.definition = flowDefinition
job.definition.lightweight = orgLightweight
job.save()
println ">> " + job.fullName + " DONE !"
}
} else {
println "${newCredId} CANNOT be found !!"
}
"DONE"
// vim:tabstop=2:softtabstop=2:shiftwidth=2:expandtab:filetype=groovy:
with output
#!/usr/bin/env groovy
import hudson.plugins.git.GitSCM
import hudson.plugins.git.UserRemoteConfig
import org.jenkinsci.plugins.workflow.job.WorkflowJob
import org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition
import com.cloudbees.plugins.credentials.common.StandardCredentials
import com.cloudbees.plugins.credentials.CredentialsProvider
String newCredId = 'ED25519_SSH_CREDENTIAL'
String orgCredId = ''
String newUrl = ''
String orgUrl = ''
if ( CredentialsProvider.lookupCredentials( StandardCredentials.class, jenkins.model.Jenkins.instance)
.any { newCredId == it.id }
) {
jenkins.model.Jenkins.instance.getAllItems( WorkflowJob.class ).findAll {
it.definition instanceof org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition &&
! it.definition?.scm?.userRemoteConfigs.collect { it.credentialsId }.contains( newCredId )
}.each { job ->
GitSCM orgScm = job.definition?.scm
Boolean orgLightweight = job.definition?.lightweight
List<UserRemoteConfig> newUserRemoteConfigs = orgScm.userRemoteConfigs.collect {
orgUrl = it.url
newUrl = 'ssh://' + it.url.split('ssh://').last().split('@').last()
orgCredId = it.credentialsId
new UserRemoteConfig( newUrl, it.name, it.refspec, newCredId )
}
GitSCM newScm = new GitSCM( newUserRemoteConfigs, orgScm.branches, orgScm.doGenerateSubmoduleConfigurations,
orgScm.submoduleCfg, orgScm.browser, orgScm.gitTool, orgScm.extensions
)
CpsScmFlowDefinition flowDefinition = new CpsScmFlowDefinition( newScm, job.definition.scriptPath )
job.definition = flowDefinition
job.definition.lightweight = orgLightweight
job.save()
println ">> " + job.fullName + " DONE :" +
"\n\t - orgScm: ${(orgCredId ?: '').padRight(30)}: ${orgUrl}" +
"\n\t - newScm: ${(newCredId ?: '').padRight(30)}: ${newUrl}"
}
} else {
println "${newCredId} CANNOT be found !!"
}
"DONE"
// vim:tabstop=2:softtabstop=2:shiftwidth=2:expandtab:filetype=groovy:
update branch, credentialsId, repo url and browser in SCM definition
#!/usr/bin/env groovy
import hudson.plugins.git.GitSCM
import hudson.plugins.git.UserRemoteConfig
import org.jenkinsci.plugins.workflow.job.WorkflowJob
import org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition
import com.cloudbees.plugins.credentials.common.StandardCredentials
import com.cloudbees.plugins.credentials.CredentialsProvider
import hudson.plugins.git.BranchSpec
import hudson.plugins.git.browser.GithubWeb
Map<String, String> config = [
url: 'https://github.com/OWNER/REPO.git',
branch: 'refs/heads/main',
credId: 'GITHUB_TOKEN'
]
Map<String, String> old = [
repo: 'OLD_OWNER/OLD_REPO',
branch: 'OLD_BRANCH'
]
Map done = [:]
if ( CredentialsProvider.lookupCredentials( StandardCredentials.class, jenkins.model.Jenkins.instance )
.any { config.credId == it.id }
) {
done = jenkins.model.Jenkins.instance.getAllItems( WorkflowJob.class ).findAll {
it.definition in org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition &&
it.definition?.scm?.repositories?.collectMany{ it.getURIs() }.any{ it.toString().contains(old.repo) }
}.collectEntries { job ->
Map temp = [ origin: [:], updated: [:] ]
GitSCM orgScm = job.definition?.scm
Boolean orgLightweight = job.definition?.lightweight
// urls and credentialsId
List<UserRemoteConfig> newUserRemoteConfigs = orgScm.userRemoteConfigs.collect {
temp.origin << [ url: it.url, credId: it.credentialsId ]
temp.updated << [ url: config.url, credId: config.credId ]
new UserRemoteConfig( config.url, it.name, it.refspec, config.credId )
}
// branches
temp.origin.branches = orgScm.branches.collect { it.name }
List<BranchSpec> newBranches = orgScm.branches.any { it.toString().contains(old.branch) } ? [ new BranchSpec(config.branch) ] : orgScm.branches
temp.updated.branches = newBranches.collect { it.name }
// browser
temp.origin.browser = orgScm?.browser ?: '-'
GithubWeb newBrowser = job.definition.scm.browser in GithubWeb ? orgScm.browser : new GithubWeb( config.url - (/\.git$/) )
temp.updated.browser = newBrowser.url.toString()
// update
GitSCM newScm = new GitSCM(
newUserRemoteConfigs,
newBranches,
orgScm.doGenerateSubmoduleConfigurations,
orgScm.submoduleCfg,
newBrowser,
orgScm.gitTool,
orgScm.extensions
)
CpsScmFlowDefinition flowDefinition = new CpsScmFlowDefinition( newScm, job.definition.scriptPath )
job.definition = flowDefinition
job.definition.lightweight = orgLightweight
job.save()
[ (job.fullName.toString()): temp ]
}
} else {
println "${config.credId} CANNOT be found !!"
}
// List keys = [ 'credId', 'branches', 'url', 'browser' ]
List<String> keys = done.values().first().origin.keySet()
println done.collect { item ->
def rows = [item.value.origin, item.value.updated].collect { row ->
keys.collectEntries {[ (it): ( row[it] in List ? row[it].join(',') : row[it].toString() ) ]}
}
def widths = keys.collectEntries { k -> [ (k): rows.collect { it[k].length() }.max() ] }
Closure printRow = { row -> keys.collect { row[it].padRight(widths[it]) }.join(' | ') }
">> ${item.key} <<\n\t" + rows.collect(printRow).join('\n\t')
}.join('\n\n')
// vim:tabstop=2:softtabstop=2:shiftwidth=2:expandtab:filetype=groovy:
add gitweb url
#!/usr/bin/env groovy
import org.jenkinsci.plugins.workflow.job.WorkflowJob
import org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition
import hudson.plugins.git.GitSCM
import hudson.plugins.git.browser.GithubWeb
String pattern = 'OWNER/REPO.git'
jenkins.model.Jenkins.instance.getAllItems( WorkflowJob.class ).findAll {
it.definition in CpsScmFlowDefinition &&
it.definition?.scm?.repositories?.collectMany{ it.getURIs() }.any{ it.toString().endsWith(pattern) } &&
! it.definition.scm.browser in GithubWeb
}.collect{ job ->
GitSCM scm = job.definition?.scm
Boolean lightweight = job.definition?.lightweight
String repoUrl = scm?.repositories?.collectMany{ it.getURIs() }.join() - (~/\.git$/)
GithubWeb newBrowser = new GithubWeb( repoUrl )
// update
GitSCM newScm = new GitSCM(
scm.userRemoteConfigs,
scm.branches,
scm.doGenerateSubmoduleConfigurations,
scm.submoduleCfg,
newBrowser,
scm.gitTool,
scm.extensions
)
CpsScmFlowDefinition flowDefinition = new CpsScmFlowDefinition( newScm, job.definition.scriptPath )
job.definition = flowDefinition
job.definition.lightweight = lightweight
job.save()
println ">> updated browser for '${job.fullName}'"
}
"DONE"
// vim:tabstop=2:softtabstop=2:shiftwidth=2:expandtab:filetype=groovy:
disable all particular projects jobs
List<String> projects = [ 'project-1', 'project-2', 'project-n' ]
jenkins.model.Jenkins.instance.getAllItems(Job.class).findAll {
projects.any { p -> it.fullName.startsWith(p) }
}.each {
println "~~> ${it.fullName}"
it.disabled = true
it.save()
}
undo disable jobs in particular projects
List<String> projects = [ 'project-1', 'project-2', 'project-n' ]
jenkins.model.Jenkins.instance.getAllItems(Job.class).findAll {
it.disabled && projects.any{ p -> it.fullName.startsWith(p) }
}.each {
println "~~> ${it.fullName}"
it.disabled = false
it.save()
}
add build discarder
import hudson.tasks.LogRotator
import org.jenkinsci.plugins.workflow.job.WorkflowJob
Map<String, int> policy = [
daysToKeep: 15,
numToKeep: 20
]
String JOB_PATTERN = 'pattern'
jenkins.model.Jenkins.instance.getAllItems(WorkflowJob.class).findAll{
it.fullName.startsWith( JOB_PATTERN ) && ! it.buildDiscarder
}.each { job ->
// daysToKeep, numToKeep, artifactDaysToKeep, artifactNumToKeep
LogRotator newRotator = new LogRotator(
policy.getOrDefault( 'daysToKeep' , -1 ) ,
policy.getOrDefault( 'numToKeep' , -1 ) ,
policy.getOrDefault( 'artifactDaysToKeep' , -1 ) ,
policy.getOrDefault( 'artifactNumToKeep' , -1 )
)
job.buildDiscarder = newRotator
job.save()
println "updated ${job.fullName} : Set to 30 days / 50 builds"
}
"DONE"
add build discarder for multiple projects
import hudson.tasks.LogRotator:wa
import org.jenkinsci.plugins.workflow.job.WorkflowJob
Map<String, Map<String, int>> policies = [
'JOB_PATTERN_1': [ daysToKeep: 30 , numToKeep: 50 ] ,
'JOB_PATTERN_2': [ daysToKeep: 7 , numToKeep: 10 , artifactDaysToKeep: 30 , artifactNumToKeep: 20 ]
]
policies.each { pattern, policy ->
jenkins.model.Jenkins.instance.getAllItems( WorkflowJob.class ).findAll{
it.fullName.startsWith( pattern ) && ! it.buildDiscarder
}.each { job ->
int d = policy.getOrDefault( 'daysToKeep' , -1 )
int n = policy.getOrDefault( 'numToKeep' , -1 )
int ad = policy.getOrDefault( 'artifactDaysToKeep' , -1 )
int an = policy.getOrDefault( 'artifactNumToKeep' , -1 )
// daysToKeep, numToKeep, artifactDaysToKeep, artifactNumToKeep
LogRotator newRotator = new LogRotator( d, n, ad, an )
job.buildDiscarder = newRotator
job.save()
println ">> updated ${job.fullName}:" +
( d != -1 ? " daysToKeep=${d}" : "" ) +
( n != -1 ? " numToKeep=${n}" : "" ) +
( ad != -1 ? " artifactDaysToKeep=${ad}" : "" ) +
( an != -1 ? " artifactNumToKeep=${an}" : "" )
}
}
"DONE"