Отключить все задания Jenkins из заданного Jenkins View / Tab

У меня есть около 100-120 заданий в одном из представлений под названием "Развертывание Gradle", которое я создал в Jenkins. Как я могу отключить все задания из Jenkins только из заданного представления / вкладки.

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

jenkins = Hudson.instance

//The following works actually but gives a lot of info.
//println "----" + jenkins.instance.getView("Gradle Deploys").items

println "----" + jenkins.instance.getView("Gradle Deploys").items.each.getItems().print(it)

Как только я получаю список только имен заданий в данном представлении, мне просто нужно использовать функцию ".disable()" в приведенной выше команде, и она будет работать.

Если я использую следующий код, он делает то, что я хочу, но я ищу один вкладыш.

for (item in jenkins.instance.getView("Gradle Deploys").items) {
   println("\nJob: $item.name")
   item.disabled=true

}  

3 ответа

Решение

Спасибо Тиму за его решение. Я добавляю / улучшаю это немного дальше:

jenkins.instance.getView("Gradle Deploys").items*.disabled = true

Но если вы хотите распечатать что-то в то же время, вам понадобится каждый

    jenkins = Hudson.instance

    jenkins.instance.getView("Gradle Deploys").items.each { item ->
    println "\nJob: $item.name"
    item.disabled = true
}

Теперь приведенные выше примеры отлично работают, если вы пытаетесь запустить их из "Консоли сценариев", но выдают ошибку, если вы пытаетесь создать / запустить его как скрипт Scriptler (как показано ниже).

См. Приведенный выше код работает в представлении Script Console в Jenkins (когда вы нажимаете Manage Jenkins > Script Console). Чтобы получить это, вам может понадобиться установленный плагин.

Теперь тот же сценарий не работал, когда я пытался создать сценарий Scripter Script и выполнял его таким образом. Для этого требуется установленный плагин Scriptler.

Чтобы решить приведенное выше сообщение об ошибке (как показано в окне Scriptler Script - окно), вам нужно ввести еще одну строку (вверху).

Окончательный сценарий выглядит следующим образом (ПРИМЕЧАНИЕ. Значение переменной viewName будет предоставлено параметром Scriptler, и оно будет перезаписывать все, что вы упомянули в самом сценарии):

// Следующая строка необходима, если вы запускаете скрипт / код через сценарий "Scriptler Script". // Таким образом, вы можете предложить пользователю указать параметры (например, viewName) и использовать его для отключения задания только в этом представлении.

import hudson.model.*

jenkins = Hudson.instance

println ""
println "--- Disabling all jobs in view: ${viewName}"
println ""

jenkins.instance.getView(viewName).items*.disabled = true

//Now the above will disable it but you still need to save it. Otherwise, you'll loose your changes (of disabling the jobs) after each Jenkins restart.
jenkins.instance.getView(viewName).items.each { item -> item.save() }

Вы должны иметь возможность просто отключить их все с помощью:

jenkins.instance.getView("Gradle Deploys").items*.disabled = true

Но если вы хотите распечатать что-то одновременно, вам понадобится each

jenkins.instance.getView("Gradle Deploys").items.each { item ->
    println "\nJob: $item.name"
    item.disabled = true
}
Jenkins.instance.getView("Gradle Deploys").items*.disabled = true
Другие вопросы по тегам