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的队列只保留添加的最后一个构建; 每个新构建都将替换当前队列中的任何作业.
有没有很好的方法来实现这一目标?
向作业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)
这是一种解决方法:
| 归档时间: |
|
| 查看次数: |
9415 次 |
| 最近记录: |