3

我们有一个大型的 Hudson 设置,其中有许多计划的构建一直在运行。目前,我正在尝试让一个构建正常工作,但是当计划的构建进入队列时,我必须偶尔等待。有没有办法禁用所有计划的构建,这样我就可以专注于我的麻烦构建,而无需调整每个单独构建的“cron”设置?

4

6 回答 6

4

告诉它准备关闭。


从 OP(banjollity)编辑
它并不完美,但我认为这是一种合理的“默认安装的几次鼠标点击解决方案”类型的解决方案,因此是公认的答案。

  1. 排队找工作
  2. 告诉哈德森准备关闭。这可以防止同时运行其他作业。
  3. 诊断我的工作中的错误,提交可能修复它的新代码。(我喜欢我的工作)。
  4. 取消 Hudson 关闭。
  5. 转到步骤 1。
于 2009-08-19T13:40:35.727 回答
4

我贡献的“配置切片”插件允许您同时修改许多作业的 cron 设置。这应该允许您进行所需的批量更改。

于 2009-08-19T14:03:00.197 回答
2

根据 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

于 2010-08-10T17:12:20.643 回答
0

我没有看到直接的方法,但是您可以编写一些内容来更新所有作业的 config.xml。

在 hudson 的每个作业目录中,都有一个 config.xml。<project> 有一个名为 disabled 的元素,您可以将其更新为 true,从而禁用该构建。

不理想,但是一旦您拥有遍历目录并更改禁用值的脚本,您就可以随时使用它。

于 2009-08-19T11:23:37.580 回答
0

搜索类似的东西让我想到了这个问题,我意识到 Michael Donohue 的回答(以及他贡献的插件)还有另一个好处。

使用“配置切片”,您可以轻松地一次性禁用一部分作业。这正是我需要暂时禁用 8 个相关工作中的 7 个,以便我可以在 8 日工作。谢谢迈克尔!

于 2010-08-26T18:59:25.970 回答
0

这可以使用詹金斯控制台完成。它运行 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()
}
于 2015-05-19T11:53:54.377 回答