詹金斯管道" waitUntil" - 改变尝试之间的延迟

时间:2017-06-12 08:24:48

标签: jenkins jenkins-pipeline

我们使用Jenkins管道进行构建和测试。在构建之后,我们在几个测量设备上运行自动化测试。

为了更好地了解所需的测试时间,我创建了一个测试阶段,定期检查测试的状态。完成所有测试后,管道就完成了。我使用" waitUntil"为此功能实现Jenkins管道。

我的问题是:每次尝试后,尝试之间的暂停越来越多。这是一个非常好的主意。但是:过了一会儿,尝试之间的暂停时间长达16小时甚至更长。这个值对我的需求来说太高了,因为我想知道所需的测试时间。

我的问题是:有没有人知道如何改变" waitUntil"

的行为?

我知道我可以使用"而#34;循环,但我更愿意使用" waitUntil"。

来解决这个问题
stage ">>> Waiting for testruns"
waitUntil {
    sleep(10)
    return(checkIfTestsAreFinished())
} 

3 个答案:

答案 0 :(得分:0)

Jenkins命令waitUntil不应同步启动。

要知道所需的时间,您必须在测试输出中添加时间戳,并分别解析和计算。

答案 1 :(得分:0)

Jenkins的新版本已将其设置为永远不会超过15秒(请参见https://issues.jenkins-ci.org/browse/JENKINS-34554)。

答案 2 :(得分:0)

在waitUntil 中,如果块中的处理返回false,则waitUntil 步骤等待更长的时间并再次尝试。 “a bit longer” 表示 0.25 秒的等待时间。如果需要再次循环,则将其乘以 1.2 的系数以获得下一个等待周期的 0.3 秒。在每个后续循环中,最后一次等待时间再次乘以 1.2 以获得等待时间。因此,序列为 0.25、0.3、0.36、0.43、0.51... 直到 15 秒(正如在下面的一个答案中提到的那样,Jenkins 解决了这个问题)。

见下图:

enter image description here

如果您使用的是较旧的 Jenkins 版本,那么可能的解决方案是使用 timeout

timeout(time: 1, unit: 'HOURS'){
    // you can change format in seconds, minutes, hours
    // you can decide your know timeout limit.
    waitUntil {
        try {
            //sleep(10)// you don't need this
            return(checkIfTestsAreFinished())
        } catch (exception) {
            return false
        }
    }//waituntil
}//timeout 

请注意该行为来自 Jenkins LTS 2.235.3。