首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jenkins管道:不重置for循环中的超时

Jenkins管道:不重置for循环中的超时
EN

Stack Overflow用户
提问于 2020-10-23 16:11:49
回答 1查看 449关注 0票数 0

我有一个jenkins管道脚本,在这个脚本中,我使用警告下一代插件根据一些任务生成的一些日志文件记录一些问题。

由于某些原因,有时工作会永远停留在某个recordIssues任务上。

我包围了对那个recordIssues调用的调用,并在try / recordIssues块中设置了一个超时,以便让每个recordIssues任务等待“正确”结束。

代码语言:javascript
复制
def record_issues_map = [
    'UE4_AssetCheck' : 'DataValidation',
    'UE4_Cook' : 'DataValidation',
    'UE4_CompileBlueprints' : 'CompileAllBlueprints',
    'UE4_MapCheckValidation' : 'MapCheckValidation',
]

timestamps {
    for ( entry in record_issues_map ) {
        try {
            timeout(time: 120, unit: 'SECONDS') {
                def log_file_path = "Saved\\Logs\\${entry.value}.log"
                echo "recordIsses called for parser ${entry.key} on log file ${log_file_path}"
                recordIssues enabledForFailure: true, failOnError: true, qualityGates: [[threshold: 1, type: 'TOTAL', unstable: false]], tools: [groovyScript(parserId: "${entry.key}", pattern: "${log_file_path}", reportEncoding: 'UTF-8')]
            }
        } catch ( e ) {
            echo "Timeout during recording of issues for ${entry.key}"
        }
    }
}

但是,当其中一个recordIssues到达超时时,由于超时而执行的所有recordIssues仍然被取消,正如您在日志中看到的那样:

代码语言:javascript
复制
[Pipeline] timeout
Timeout set to expire in 2 min 0 sec
[Pipeline] {
[Pipeline] echo
recordIsses called for parser UE4_AssetCheck on log file Saved\Logs\DataValidation.log
[Pipeline] recordIssues
[Pipeline] }
[Pipeline] // timeout
[Pipeline] echo
Timeout during recording of issues for UE4_AssetCheck
[Pipeline] timeout
Timeout set to expire in 2 min 0 sec
[Pipeline] {
[Pipeline] echo
recordIsses called for parser UE4_Cook on log file Saved\Logs\DataValidation.log
[Pipeline] recordIssues
[Pipeline] }
[Pipeline] // timeout
[Pipeline] echo
Timeout during recording of issues for UE4_Cook
[Pipeline] timeout
Timeout set to expire in 2 min 0 sec
[Pipeline] {
[Pipeline] echo
recordIsses called for parser UE4_CompileBlueprints on log file Saved\Logs\CompileAllBlueprints.log
[Pipeline] recordIssues
[Pipeline] }
[Pipeline] // timeout
[Pipeline] echo
Timeout during recording of issues for UE4_CompileBlueprints
[Pipeline] timeout
Timeout set to expire in 2 min 0 sec
[Pipeline] {
[Pipeline] echo
recordIsses called for parser UE4_MapCheckValidation on log file Saved\Logs\MapCheckValidation.log
[Pipeline] recordIssues
[Pipeline] }
[Pipeline] // timeout
[Pipeline] echo
Timeout during recording of issues for UE4_MapCheckValidation
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Package Swarms (Win64))
[Pipeline] isUnix
[Pipeline] isUnix
[Pipeline] isUnix
[Pipeline] bat

有什么办法可以绕过这个吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-24 09:44:00

原来我得到的例外不是因为超时,而是因为https://issues.jenkins-ci.org/browse/JENKINS-49732

我用record_issues_map.each { entry -> {} }替换了for循环,以消除异常。

为了解决recordIssues的超时问题,我先调用了scanForIssues,然后调用了publishIssues

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64503629

复制
相关文章

相似问题

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