Jenkins参数化了只排队一个构建的作业

Kie*_*ief 16 hudson jenkins jenkins-plugins

想象一下Jenkins工作A需要1分钟才能运行,而工作B需要5分钟.

如果我们将作业A配置为触发作业B,则作业B正在运行作业A可以在B完成之前运行5次.但是,Jenkins没有为作业B的队列添加5个构建,这很好,因为否则快速的作业A将为不良的慢作业B创建不断增长的构建积压.

但是,现在我们希望使用参数化触发器插件将作业A触发器B作为参数化作业.参数化作业确实排队积压,这意味着作业A很乐意为作业B创建大量构建,这可能无法跟上.

每次触发时向队列添加新的参数化构建都是有意义的,因为参数可能不同.Jenkins不应该总是假设新的参数化构建不需要先前排队的构建.

但是,在我们的例子中,我们实际上是这样的.作业A构建并打包我们的应用程序,然后作业B将其部署到类似生产的环境中并运行更多的集成测试.我们还有一个构建C,它可以部署到另一个环境并进行更多测试,因此这对我们来说是一个不断升级的模式.

我们希望参数化作业B的队列只保留添加的最后一个构建; 每个新构建都将替换当前队列中的任何作业.

有没有很好的方法来实现这一目标?

Ron*_*eil 6

向作业B添加"系统Groovy脚本"预构建步骤,以检查具有相同名称的(较新的)排队作业,如果找到则将其解除:

def name = build.properties.environment.JOB_NAME
def queue = jenkins.model.Jenkins.getInstance().getQueue().getItems()
if (queue.any{ it.task.getName() == name }) {
  println "Newer " + name + " job(s) in queue, aborting"
  build.doStop()
} else {
  println "No newer " + name + " job(s) in queue, proceeding"
}
Run Code Online (Sandbox Code Playgroud)


Juu*_*nen 1

这是一种解决方法: