我有参数的工作,我想保留给定参数的最新稳定版本。
示例
#1 run with param=A -> stable
#2 run with param=B -> stable
#3 run with param=A -> unstable
#4 run with param=B -> stable
#5 run with param=A -> unstable
我只保留5个版本,并且我希望始终保持最新的稳定版本以获得参数值。 在我的例子中,如果下一个构建仍然不稳定,如何保持作业#1,这是参数A的最后一个构建?
我没有找到一个插件来做到这一点。
如何定义识别参数值的保存策略?
答案 0 :(得分:1)
第1步:使用Groovy Postbuild Plugin并使用以下脚本:
// get *all* the good builds first
def goodBuilds = manager.build.project.getBuilds().findAll { it.result.isBetterOrEqualTo( hudson.model.Result.SUCCESS ) }
// then remove all except for the first one
goodBuilds.drop( 1 ).each {
manager.listener.logger.println( "deleting build " + it )
it.delete()
}
这将确保只有最后一次成功(稳定)的构建保留在构建历史记录中。
第2步:在上述脚本中使用一些代码替换goodBuilds.drop( 1 )
,该代码将goodBuilds
中的第一个版本保留为任何给定的参数值。这是一个练习: - )
除此之外,您仍然可以设置构建总数的限制(在您的情况下为5)。
答案 1 :(得分:0)
感谢@Alex O获取插件Groovy Postbuild Plugin
我不熟悉groovy并且我无法使用他提出的脚本,因为它的工作方式并不完全符合我的意愿。或者我没有理解......
我写了一个不同的脚本,考虑所有构建稳定和不稳定。也许它不是最佳的,但它可以按照我的意愿工作。
def allBuilds = manager.build.project.getBuilds()
def lastSuccessParamA = false
def lastSuccessParamB = false
def count = 0
for (hudson.model.Run run : allBuilds) {
def param = run.buildVariables.get('param')
if (lastSuccessParamA == false && run.result.isBetterOrEqualTo( hudson.model.Result.SUCCESS ) && "A".equals(param)) {
manager.listener.logger.println( "keep last stable build with param = A : " + run)
lastSuccessParamA = true
} else if (lastSuccessParamB == false && run.result.isBetterOrEqualTo( hudson.model.Result.SUCCESS ) && "B".equals(param)) {
manager.listener.logger.println( "keep last stable build with param = B : " + run)
lastSuccessParamB = true
} else if (count > 5){
manager.listener.logger.println( "deleting build " + run)
run.delete()
} else {
manager.listener.logger.println( "keep build " + run)
count++
}
}