在 System Groovy 中暂时禁用 Jenkins 服务器上的 SCM 轮询

Nic*_*olt 5 version-control groovy jenkins

我们有一个 Jenkins 服务器,它运行着 20 到 30 个作业。

由于构建过程相当复杂,我们将实际构建分解为 1 个子构建,其中一些可以同时运行,其他则必须遵循之前的构建步骤。因此,我们将每个构建步骤分为 3 组,在构建进行时阻止。

例如:

Main Build : GroupA  : Builds A1, A2 & A3

           : GroupB  : Builds B1, B2 & B3

           : GroupC  : Builds C1, C2, C3, C4, C5 & C6

           : GroupD  : HW_Tests T1, T2, T3, T4 & T5


Builds B1, B2 & B3 rely on the output from A1, A2, A3 etc
Run Code Online (Sandbox Code Playgroud)

由于构建和测试几乎 24/7 运行,我发现很难安排 Jenkins Master 的重启。选择“准备关闭”将意味着新作业排队,但它总是会阻止正在运行的作业,因为使用我上面的示例,如果 GroupB 处于活动状态,构建 C1、C2 等也将排队,并且主构建将被封锁。

作为一种解决方法,我想在所有正在运行的作业完成之前禁用服务器上的 SCM 轮询。这将防止触发新作业,但也允许正在运行的作业完成。然后我可以重新启动 Jenkins 并重新启用 SCM 轮询,从而恢复正常服务。

我们使用的 SCM 是 Perforce。

我无法找到任何表明上述可能性的地方,但是,我确信它在 System Groovy 中一定是可行的……只是不确定如何。请问这里有人有什么想法吗?

非常感谢

Ale*_*x O 6

您只能禁用那些具有 SCM 轮询触发器的作业。这个 groovy 脚本将做到这一点:

Hudson.instance.items.each { job ->
  if ( job.getTrigger(  hudson.triggers.SCMTrigger ) != null ) {
    println "will disable job ${job.name}"
    job.disable()
  }
}
Run Code Online (Sandbox Code Playgroud)

重新启用作业将作为练习:)


Muh*_*Haq 0

  1. 如果有一个或 2 个版本配置为进行 SCM 轮询,您可以进入每个版本的配置并取消选中该框。就是这么简单:)

  2. 如果您使用 jenkins job builder,那么一次更改多个作业的配置应该更容易。

  3. 如果您使用从站甚至主站,SCM轮询依赖于JAVA?从 master jenkins 中配置的位置暂时从机器上删除 JAVA ;) 轮询将失败 :P 这是一个愚蠢的 hack ;)

我希望有帮助!?