禁用给定Jenkins视图/选项卡中的所有Jenkins作业

Aru*_*gal 7 groovy gradle jenkins jenkins-scriptler jenkins-cli

我在Jenkins创建的一个名为"Gradle Deploys"的视图中有大约100-120个作业.如何仅从给定的视图/选项卡禁用Jenkins的所有作业.

我尝试了以下groovy语法,首先只显示给定视图中的所有作业,但它出错了.

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)
Run Code Online (Sandbox Code Playgroud)

一旦我在给定视图中获得了只是作业名称的列表,我只需要在上面的命令中使用".disable()"函数,它就可以工作了.

如果我使用下面的代码,它会做我想要的,但我正在寻找一个衬垫.

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

}  
Run Code Online (Sandbox Code Playgroud)

tim*_*tes 13

您应该可以使用以下命令禁用它们:

jenkins.instance.getView("Gradle Deploys").items*.disabled = true
Run Code Online (Sandbox Code Playgroud)

但如果你想同时打印出一些东西,你需要一个 each

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


Aru*_*gal 5

感谢蒂姆的解决方案。我正在进一步添加/增强它:

jenkins.instance.getView("Gradle Deploys").items*.disabled = true
Run Code Online (Sandbox Code Playgroud)

但是,如果您想同时打印一些内容,则需要

    jenkins = Hudson.instance

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

现在,如果您尝试从“脚本控制台”运行上述示例,则它们可以完美运行,但是如果您尝试将其作为Scriptler脚本创建/运行,则会出错(如下所示)。

请参阅:上面的代码在Jenkins的“脚本控制台”视图中有效(当您单击“管理Jenkins”>“脚本控制台”时)。为此,您可能需要安装插件。

在此处输入图片说明

现在,当我尝试创建脚本脚本并以这种方式运行该脚本时,该脚本无法正常工作。这需要安装Scriptler插件。

在此处输入图片说明

要解决以上错误消息(如Scriptler Script-窗口所示),您需要输入另一行(在顶部)。

最终脚本看起来像(注意:viewName变量的值将由Scriptler参数提供,它将覆盖脚本本身中提到的所有内容):

//如果要通过“脚本脚本”脚本方式运行脚本/代码,则以下行是必需的。//通过这种方式,您可以提示用户提供参数(例如: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() }
Run Code Online (Sandbox Code Playgroud)