我可以一次性禁用Hudson的自动预定构建吗?

时间:2009-08-19 11:03:29

标签: java jenkins continuous-integration hudson

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

6 个答案:

答案 0 :(得分:4)

告诉它准备关闭。


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

  1. 排队工作
  2. 告诉哈德森准备关闭。这可以防止其他作业同时运行。
  3. 使用我的作业诊断故障,提交可能修复它的新代码。 (我喜欢我的工作)。
  4. 取消Hudson关闭。
  5. 转到第1步。

答案 1 :(得分:4)

我提供的'configuration slicing'插件允许您同时修改许多作业的cron设置。这应该允许您进行所需的批量更改。

答案 2 :(得分: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

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

这可以使用jenkins控制台完成。它运行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()
}