gpt4 book ai didi

hudson - Jenkins 参数化作业,只对一个构建进行排队

转载 作者:行者123 更新时间:2023-12-03 14:59:37 27 4
gpt4 key购买 nike

想象一个 Jenkins 作业 A 需要 1 分钟运行,而作业 B 需要 5 分钟。

如果我们配置作业 A 来触发作业 B,而作业 B 正在运行,作业 A 可能会在 B 完成之前运行 5 次。然而,Jenkins 并没有向作业 B 的队列中添加 5 个构建,这很好,因为否则快速的作业 A 将为糟糕的缓慢作业 B 创建不断增长的构建积压。

但是,现在我们希望使用 parameterized trigger plugin 将作业 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"
}

关于hudson - Jenkins 参数化作业,只对一个构建进行排队,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8974170/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com