首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jenkins重试代码块不会多次执行

Jenkins重试代码块不会多次执行
EN

Stack Overflow用户
提问于 2021-03-20 21:12:05
回答 2查看 78关注 0票数 0

重试块不起作用。它只执行一次。

我使用echoerror测试了retry块,它会重试指定的次数。但在测试timeout时,重试只执行一次。

代码语言:javascript
复制
pipeline {
    agent any
    stages {
        stage("Deploy") {
            steps {
                retry(3) {
                    timeout(time: 1, unit: 'SECONDS') {
                        sleep 3
                    }
                }
                
                echo "after timeout"
            }
        }
    }
}

日志:

代码语言:javascript
复制
Started by user admin
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /var/jenkins_home/workspace/pipeline-stage-steps-retry-timeout
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Deploy)
[Pipeline] retry
[Pipeline] {
[Pipeline] timeout
Timeout set to expire in 1 sec
[Pipeline] {
[Pipeline] sleep
Sleeping for 3 sec
Cancelling nested steps due to timeout
[Pipeline] }
[Pipeline] // timeout
[Pipeline] }
[Pipeline] // retry
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Timeout has been exceeded
Finished: ABORTED

如果我尝试超时30秒和睡眠50秒,它仍然不起作用。

代码语言:javascript
复制
Started by user admin
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /var/jenkins_home/workspace/5. pipeline-stage-steps-retry-timeout
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Deploy)
[Pipeline] retry
[Pipeline] {
[Pipeline] timeout
Timeout set to expire in 30 sec
[Pipeline] {
[Pipeline] sleep
Sleeping for 50 sec
Cancelling nested steps due to timeout
[Pipeline] }
[Pipeline] // timeout
[Pipeline] }
[Pipeline] // retry
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Timeout has been exceeded
Finished: ABORTED

代码:

代码语言:javascript
复制
pipeline {
    agent any
    stages {
        stage("Deploy") {
            steps {
                retry(3) {
                    timeout(time: 30, unit: 'SECONDS') {
                        sleep 50
                    }
                }
                
                echo "after timeout"
            }
        }
    }
}
EN

回答 2

Stack Overflow用户

发布于 2021-03-20 21:15:24

它无法工作,因为您将超时设置为1秒。

设置至少1分钟或至少30秒

代码语言:javascript
复制
timeout(time: 1, unit: 'MINUTES')
票数 0
EN

Stack Overflow用户

发布于 2021-03-27 22:35:11

retry块中使用timeout时,这似乎是一个已知的问题:

JENKINS-51454

JENKINS-51928

你必须自己去捕捉异常

以下是解决此问题的方法:

注意:try-catch子句在timeout块内,不包含timeout

代码语言:javascript
复制
pipeline {
    agent any
    stages {
        stage("Deploy") {
            steps {
                retry(3) {
                    timeout(time: 1, unit: 'SECONDS') {
                        script{
                            try {
                                sleep(3)
                            } catch (err) {
                                error 'Timeout has been exceeded'
                            }
                        }
                    }
                }
                echo "after timeout"
            }
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66721998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档