如何保持给定参数的最新稳定版本?

时间:2016-09-18 19:47:14

标签: jenkins

我有参数的工作,我想保留给定参数的最新稳定版本。

示例

#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的最后一个构建?

我没有找到一个插件来做到这一点。

如何定义识别参数值的保存策略?

2 个答案:

答案 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++
    }
}