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

问题描述 投票:0回答:4

我在 Jenkins 中创建的名为“Gradle Deploys”的视图之一中有大约 100-120 个作业。如何仅从给定的视图/选项卡禁用 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

}  
groovy jenkins gradle jenkins-cli jenkins-scriptler
4个回答
15
投票

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

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

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

each

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

10
投票

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

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

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

    jenkins = Hudson.instance

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

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

参见:上面的代码在 Jenkins 的脚本控制台视图中运行(当您单击“管理 Jenkins”>“脚本控制台”时)。要获得此功能,您可能需要安装插件。

enter image description here

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

enter image description here

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

最终脚本如下所示(注意: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
投票
Jenkins.instance.getView("Gradle Deploys").items*.disabled = true

0
投票

将解决方案从 AKS 扩展为如下所示,允许禁用文件夹中的所有作业。

Jenkins.instance.getView("all").items.each { item -> 
  println "\nJob: $item"
  if (item.class == com.cloudbees.hudson.plugins.folder.Folder) {
    item.items.each { subitem ->
      println "\nJob: $subitem"
      subitem.disabled = true
    }
  } else {
    item.disabled = true
  }
}

这里,第一行中的“all”可以替换为特定的视图名称,否则会禁用 Jenkins 服务器中的所有作业。

© www.soinside.com 2019 - 2024. All rights reserved.