我有一个jenkins管道脚本,在这个脚本中,我使用警告下一代插件根据一些任务生成的一些日志文件记录一些问题。
由于某些原因,有时工作会永远停留在某个recordIssues任务上。
我包围了对那个recordIssues调用的调用,并在try / recordIssues块中设置了一个超时,以便让每个recordIssues任务等待“正确”结束。
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仍然被取消,正如您在日志中看到的那样:
[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有什么办法可以绕过这个吗?
发布于 2020-10-24 09:44:00
原来我得到的例外不是因为超时,而是因为https://issues.jenkins-ci.org/browse/JENKINS-49732
我用record_issues_map.each { entry -> {} }替换了for循环,以消除异常。
为了解决recordIssues的超时问题,我先调用了scanForIssues,然后调用了publishIssues
https://stackoverflow.com/questions/64503629
复制相似问题