Groovy-скрипт для извлечения заданий, начинающихся с заданного имени

Я хотел бы получить список заданий, начинающихся с заданного имени, с последующим обновлением узла метки, на котором задание может выполняться. Я сделал следующее, но безуспешно. Любые входы в то, что мне здесь не хватает.

      import hudson.model.*;
import hudson.util.*;
import hudson.model.labels.*;
import jenkins.model.*;
import hudson.FilePath.FileCallable;
import hudson.slaves.OfflineCause;
import hudson.node_monitors.*;


buildableItems = Jenkins.instance.getAllItems.each {job ->
    job.name.startsWith("Automation -")
    println job.fullName;
}

for(item in buildableItems) {
    job.assignedlabel = new LabelAtom('new-label-name')
    item.save()
}

2 ответа

Спасибо @NoamHelmer. У меня возникла ошибка форматирования значений имени задания вывода. Из-за чего метка была изменена и вызвала ошибку в формате имени задания, но не смогла перейти к следующему имени задания. Я смог исправить это с помощью оператора continue.

      import hudson.model.labels.*
import jenkins.model.Jenkins  

def views = ["Automation – DEV", "Automation – PROD", "Automation – QA", "Automation – Staging"]
 
for (view in views) {

  def buildableItems = Jenkins.instance.getView(view).items.each {
  println it.fullName

  }
  for (item in buildableItems) {
    try {
      item.assignedLabel = new LabelAtom('New_Label_name') 
    } catch (Exception e) {
      continue;
    }
    println(item.name + " > " + item.assignedLabel)
}

}

Еще раз спасибо за ваш вклад !!

Заявление, на которое вы подаете в суд, просто перебирает элементы и закрывает их, но ничего не возвращает. Вместо этого вы должны отфильтровать свой список с помощью findAll, затем для возвращенного отфильтрованного списка запустите код, чтобы изменить метки:

      import jenkins.*
import hudson.model.labels.*;

filtredJobs =  Jenkins.instance.items.findAll { job ->
    job.name.startsWith("Automation -")
}

// Update the label for the filtered jobs
filtredJobs.each { job ->
    job.assignedlabel = new LabelAtom('new-label-name')
    item.save()
}

Или, в качестве альтернативы, используйте each и запустите как условие, так и конфигурацию в одной итерации:

      import jenkins.*
import hudson.model.labels.*;

Jenkins.instance.items.each { job ->
    if (job.name.startsWith("Automation -")) {
        job.assignedlabel = new LabelAtom('new-label-name')
        item.save()
    }
}
Другие вопросы по тегам