Ibtissam
Ibtissam

Reputation: 589

How to get Jenkins list of jobs in folder?

I'm trying to get all the jobs in a folder

Jobs = input( id: 'userInput', message: 'Select the job', parameters: [ [$class: 'ChoiceParameterDefinition', choices: "????", description: 'Properties', name: 'jobs'] ])   

what should i put on choices to get all the jobs in folder X ?

Upvotes: 3

Views: 15752

Answers (4)

user26677394
user26677394

Reputation: 1

def folderName = "Folder Name"
def allItems = hudson.model.Hudson.getInstance().getItems()

for(int i=0; i<allItems.size(); i++){
    def item = allItems[i]
    if (item instanceof com.cloudbees.hudson.plugins.folder.Folder) {
        processFolder(item, folderName)
    } else if (item.getFullName().contains(folderName)) {
        processJob(item)
    }
}

void processFolder(com.cloudbees.hudson.plugins.folder.Folder folder, String folderName) {
    if (folder.getFullName().contains(folderName)) {
        folder.getItems().each {
            if (it instanceof com.cloudbees.hudson.plugins.folder.Folder) {
                processFolder(it, folderName)
            } else {
                processJob(it)
            }
        }
    }
}

void processJob(Item job) {
    println job.getFullName()
    // you can do operations like enable or disable
    // job.disable()
}

Upvotes: 0

Retraut
Retraut

Reputation: 944

Not work for me. I created new implementation

def folderName = "folder_name_full_path"
def jobsList = []
Jenkins.instance.getAllItems(Job.class).each{
  if(it.fullName.contains(folderName)) {
    jobsList << it.fullName
  }
}

Upvotes: 0

Mateusz Filipek
Mateusz Filipek

Reputation: 41

Unfortunately this code prepared by ritusmart at least on our version of Jenkins doesn't work, we are currently using 2.289.2.

And you can get jobs from specified folder in a simpler way

def folderName = "YOUR/FOLDER/NAME/"
def allJobs = hudson.model.Hudson.getInstance().getAllItems(Job.class).findAll { it.getFullName().contains(folderName) }

Upvotes: 4

ritusmart
ritusmart

Reputation: 325

This is one way to do it, using script console:

import com.cloudbees.hudson.plugins.folder.Folder

def folderName = "test"

def allJobs= hudson.model.Hudson.getInstance().getItems()

for(int i=0; i<allJobs.size(); i++){
    def job = allJobs[i]
    if(job instanceof hudson.model.Project && job .getLastBuild() != null ){
        processJob(job)
    }else if(job instanceof Folder){
        processFolderByName(job)
    }
}

void processFolderByName(Item folder){
  if(folder.getFullName().contains(folderName))
  processFolder(folder)
}

void processFolder(Item folder){
    //println "Processing Folder -"+folder.getFullName()
    folder.getItems().each{
        if(it instanceof com.cloudbees.hudson.plugins.folder.AbstractFolder){
            processFolder(it)
        }else{
            processJob(it)
        }
    }
}

void processJob(Item job){
    println  job.getFullName()
  // you can do operations like enable to disable
  // job.disable()
}

Upvotes: 2

Related Questions