在我的Jenkins管道中,我使用Jenkins脚本语法构建了以下Jenkins步骤。它的目的是运行一个docker容器,它运行一些集成测试。我目前并行生成了其中的11个步骤。
node('tester') {
stage("Test") {
withEnv([
"USERNAME=some_user",
"UID=1000",
"GID=1000"
]) {
dir("some_directory") {
// ... some steps here
retry(1) {
try {
timeout(time: 15, unit: 'MINUTES') {
retry(1) {
sh "docker-compose --project-name tester_prod9 -f docker-compose.e2e.yml -- up --build --renew-anon-volumes --exit-code-from cypress --timeout 600"
}
}
} catch (err) {
error "Timeout!"
}
}
}
}
}
}
如您所见,我希望在docker-compose
命令失败时重试一次docker-compose
命令。但是,如果此过程(包括可能的重试)超过15分钟,我希望抛出超时错误。如果抛出超时错误,我会再次重试所有这些操作。
然而,上述预期的步骤并没有发生。
目前,当我的docker-compose
命令在第一次运行时失败时,一个“错误!“抛出错误,整个步骤结束。
正如您在下面看到的,docker-compose
命令只运行8分钟,因此不应该抛出超时错误。此外,Jenkins从不重试docker-compose
命令。
我如何修复我的Jenkins步骤以实现我想要的行为?
我的Jenkins版本是2.270。
编辑:
需要说明的是,我预计docker-compose
命令会失败,因为Docker容器中的测试失败。然而,Jenkins并没有像预期的那样重试失败的docker-compose
命令。
2条答案
按热度按时间4urapxun1#
我没有发现任何关于
retry
的信息应该> 1。官方文件说:但看起来为了触发重试,它应该设置为大于1
kcrjzv8t2#
虽然官方文档建议retry(n)将
Retry the body up to N times
,但实际上n是尝试的总次数,因此对于一次重试,您需要设置retry(2)。相信我,我是用很难的方式发现的!