6

有没有办法重复构建N次?(与上次构建的状态无关)。构建是参数化的,目前我正在使用 Jenkins Parameterized Trigger 插件,该插件设置为触发相同的构建,但这当然是一个无限循环。

我希望能够指定使用相同参数重复构建的次数。

4

2 回答 2

9

可以通过添加一个评估$JOB_COUNTER参数的条件步骤来创建 Jenkins 作业的重复循环(不是无限循环),该参数在每次迭代中都会减少。

为此,首先创建一个默认值 = 1 的新字符串参数“JOB_COUNTER”。

然后使用EnvInject 插件,勾选“ Prepare an environment for the run ”+“ Override Build Parameters ”,并添加“ Evaluated Groovy script ”:

def map  = [:]
int newJobCounter = JOB_COUNTER.toInteger() - 1
println "Decreasing JOB_COUNTER from " + JOB_COUNTER + " to " + newJobCounter  
map.put("JOB_COUNTER", newJobCounter)
return map

最后,使用Conditional BuildStep 插件+参数化触发器插件(以及可选的PostBuildScript 插件,如果您希望仅在构建完成后开始下一次迭代),设置以下内容: 在此处输入图像描述

更新:

另一种循环方式是减少预定义参数中的 JOB_COUNTER(而不是在 EnvInject 中):

JOB_COUNTER=${JOB_COUNTER}-1

然后,要在每次迭代中正确更新 JOB_COUNTER,请在 EnvInject groovy 中使用 evaluate() 方法而不是 toInteger():

int newJobCounter = evaluate(JOB_COUNTER)
println "Evaluating JOB_COUNTER: " + JOB_COUNTER + " => " + newJobCounter  
map.put("JOB_COUNTER", newJobCounter)

最后,条件动作应该是:

$JOB_COUNTER > Greater than 1
于 2015-11-02T11:28:58.943 回答
3

好吧,这个问题没有简单的解决方案,但可以很容易地编写脚本。有几种方法可以做到这一点:

  1. 使用构建流程插件

    这个插件可以让你编写项目构建流程的执行方式。您可以编写脚本以并行运行,根据需要重试失败的构建,等等。我会试一试并创建一个具有所需重试次数的脚本。我认为这将是您尝试的最佳选择。

  2. 您可以尝试使用Fail the Build PluginRetry Failed BuildsPeriodic Reincarnation Plugin

    它将使您能够故意破坏构建,然后另一个插件将尝试一次又一次地构建它。在这里控制重试次数并不容易 - 您必须根据构建过程中脚本的变量或其他内容来更改构建的状态。但是,嘿,也许这也是一个解决方案。

  3. 您可以基于RabbitMQ的更复杂的解决方案- 您可以将多个消息放入队列中以多次构建项目,然后基于这些消息构建项目。

  4. 您可以基于 BPM:JBPM Plugin with JBPM Workflow PluginJenkow

我可能会想出更多的解决方案,但上面的第一个可能是一个很好的起点......

于 2013-08-01T14:10:05.617 回答