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

时间:2015-06-29 16:52:18

标签: groovy jenkins gradle jenkins-cli jenkins-scriptler

我在其中一个名为" 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)

一旦我获得了给定视图中的工作名称列表,我就必须使用" .disable()"在上面的命令中起作用,它就会起作用。

如果我使用下面的代码,它可以满足我的需求,但我正在寻找一个代码。

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

}  

3 个答案:

答案 0 :(得分:12)

你应该可以通过以下方式禁用它们:

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

但如果你想同时打印出来的东西,你需要each

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

答案 1 :(得分:5)

感谢Tim的解决方案。我进一步添加/增强它:

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脚本(如下所示),则会出错。

请参阅:上面的代码在Jenkins的Script Console视图中工作(当您单击Manage Jenkins> Script Console时)。为此,您可能需要安装插件。

enter image description here

现在,当我尝试创建Scripter脚本并以这种方式运行时,相同的脚本不起作用。这需要安装Scriptler插件。

enter image description here

要解决上述错误消息(如脚本程序脚本 - 窗口中所示),您需要输入另一行(在顶部)。

最终脚本看起来像(注意: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() }

答案 2 :(得分:1)

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