我们有一个大型的 Hudson 设置,其中有许多计划的构建一直在运行。目前,我正在尝试让一个构建正常工作,但是当计划的构建进入队列时,我必须偶尔等待。有没有办法禁用所有计划的构建,这样我就可以专注于我的麻烦构建,而无需调整每个单独构建的“cron”设置?
6 回答
告诉它准备关闭。
从 OP(banjollity)编辑
它并不完美,但我认为这是一种合理的“默认安装的几次鼠标点击解决方案”类型的解决方案,因此是公认的答案。
- 排队找工作
- 告诉哈德森准备关闭。这可以防止同时运行其他作业。
- 诊断我的工作中的错误,提交可能修复它的新代码。(我喜欢我的工作)。
- 取消 Hudson 关闭。
- 转到步骤 1。
我贡献的“配置切片”插件允许您同时修改许多作业的 cron 设置。这应该允许您进行所需的批量更改。
根据 Mikezx6r 的建议,我想出了一个快速的方法来禁用与某个字符串匹配的所有构建:
[user@server jobs] $ for i in *build_name*; do sed -i s/"disabled>false"/"disabled>true/" $i/config.xml; done
您还可以在“for”循环中遍历特定的构建名称:
[user@server jobs] $ for i in build1 build2 build3; do sed -i s/"disabled>false"/"disabled>true/" $i/config.xml; done
您可以通过在 sed 之前添加一个“echo”来先对其进行测试,看看它会做什么:
[user@server jobs] $ for i in build1 build2 build3; do echo sed -i s/"disabled>false"/"disabled>true/" $i/config.xml; done
相反,您可以通过切换 sed 脚本来重新启用所有匹配的作业:
[user@server jobs] $ for i in build1 build2 build3; do sed -i s/"disabled>true"/"disabled>false/" $i/config.xml; done
我没有看到直接的方法,但是您可以编写一些内容来更新所有作业的 config.xml。
在 hudson 的每个作业目录中,都有一个 config.xml。<project> 有一个名为 disabled 的元素,您可以将其更新为 true,从而禁用该构建。
不理想,但是一旦您拥有遍历目录并更改禁用值的脚本,您就可以随时使用它。
搜索类似的东西让我想到了这个问题,我意识到 Michael Donohue 的回答(以及他贡献的插件)还有另一个好处。
使用“配置切片”,您可以轻松地一次性禁用一部分作业。这正是我需要暂时禁用 8 个相关工作中的 7 个,以便我可以在 8 日工作。谢谢迈克尔!
这可以使用詹金斯控制台完成。它运行 groovy 脚本,几乎可以做任何事情。
以下脚本遍历所有项目。检查它是否有 TimerTrigger。(也可以扩展对其他触发器的检查)
import hudson.model.Hudson
import hudson.model.Project
import hudson.triggers.TimerTrigger
import hudson.triggers.Trigger
import hudson.triggers.TriggerDescriptor
//All the projects on which we can apply the getBuilders method
def allProjects = Hudson.instance.items.findAll { it instanceof Project }
def projectsToWorkOn = [];
allProjects.each { Project project ->
Map<TriggerDescriptor, Trigger> triggers =
project.getTriggers();
triggers.each { trigger ->
if (trigger.value instanceof TimerTrigger) {
projectsToWorkOn.push(project)
}
}
}
projectsToWorkOn
.each { Project project ->
project.disable();
project.save()
}