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 GitSCM
  • getSCMs
    • 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/pipelines
    
  • or

    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:]

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"
Copyright © marslo 2020-2025 all right reserved,powered by GitbookLast Modified: 2026-02-09 17:23:01

results matching ""

    No results matching ""