事件背景
触发了一个扫描,然后需要等待扫描结束,获取扫描的结果。所以些了如下的代码。
每十秒钟查询一下扫描的结果,如果没有结果,则继续,直到返回true,外层是有一个30分钟超时,测试的时候换成了两分钟。
结果发现,两分钟后,并没有超时退出。google后发现,超时之后,会跑到timeout内部的try catch,而不是外部的catch。所以执行的是print(err) return false,自然的就继续在waitUntil内部执行了。
timeout(2){
waitUntil{
try {
sleep 10
//查询扫描执行结果
sh '''
xxx.sh
'''
return true
}
catch (err){
print(err)
return false
}
}
}
解决办法
通过打印print(ex.getMessage())获取超时异常的名称,准确捕获后,不返回bool值,就会抛出异常,退出timeout。
timeout(2){
waitUntil{
try {
sleep 10
//查询扫描执行结果
sh '''
xxx.sh
'''
return true
}
catch (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException ex){
//不返回bool值,显示抛出错误
echo "超时"
}
catch (ex){
print(ex)
return false
}
}
}