作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
想象一个 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/
我是一名优秀的程序员,十分优秀!