Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Groovy 禁用给定Jenkins视图/选项卡中的所有Jenkins作业_Groovy_Jenkins_Gradle_Jenkins Cli_Jenkins Scriptler - Fatal编程技术网

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

Groovy 禁用给定Jenkins视图/选项卡中的所有Jenkins作业,groovy,jenkins,gradle,jenkins-cli,jenkins-scriptler,Groovy,Jenkins,Gradle,Jenkins Cli,Jenkins Scriptler,我在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

我在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)
一旦我在给定的视图中得到一个作业名列表,我只需要在上面的命令中使用“.disable()”函数,它就可以工作了

如果我使用下面的代码,它会执行我想要的操作,但我正在寻找一个单行程序

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

}  

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

jenkins.instance.getView("Gradle Deploys").items*.disabled = true
但是,如果您想同时打印某些内容,则需要为每个

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

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

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的脚本控制台视图中工作(当您单击ManageJenkins>ScriptConsole时)。要实现这一点,您可能需要安装插件

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

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

最终脚本如下所示(注意:viewName变量的值将由Scriptler参数提供,它将覆盖脚本本身中提到的内容):

//如果您是通过“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() }

如果我不想显示/回显任何内容,是否可以在第一个命令(一行程序)中使用每个命令?您不需要这样做。第一个命令应该禁用所有项目,因为isI已更新了答案,以支持“脚本控制台”和“脚本程序”运行脚本的方式。否则,当我尝试将代码(在Jenkins的脚本控制台窗口中成功运行)作为Scriptler脚本的方式时,它给了我一个错误。您看到那里有一个bug吗?
Jenkins.instance.getView("Gradle Deploys").items*.disabled = true