gpt4 book ai didi

Jenkins 超时/中止异常

转载 作者:行者123 更新时间:2023-12-02 20:48:02 25 4
gpt4 key购买 nike

我们有一个 Jenkins 管道脚本,在所有准备步骤完成后、实际应用更改之前请求用户批准。

我们想为此步骤添加一个超时,这样如果没有用户输入,构建就会中止,目前正在使用这种方法:

    try {
timeout(time: 30, unit: 'SECONDS') {
userInput = input("Apply changes?")
}
} catch(err) {
def user = err.getCauses()[0].getUser()

if (user.toString == 'SYSTEM') { // if it's system it's a timeout
didTimeout = true
echo "Build timed out at approval step"
} else if (userInput == false) { // if not and input is false it's the user
echo "Build aborted by: [${user}]"
}
}

此代码基于此处找到的示例:https://support.cloudbees.com/hc/en-us/articles/226554067-Pipeline-How-to-add-an-input-step-with-timeout-that-continues-if-timeout-is-reached-using-a-default-value和网上的其他地方,但我真的不喜欢捕获所有错误,然后使用err.getCauses()[0].getUser()找出导致异常的原因。我宁愿明确地 catch(TimeoutException) 或类似的东西。

所以我的问题是,批准步骤超时或 userInput 为 false 会引发什么实际异常?到目前为止,我还没有在文档或 Jenkins 代码库中找到任何与此相关的内容。

最佳答案

他们引用的异常类是org.jenkinsci.plugins.workflow.steps.FlowInterruptedException

不敢相信这是 CloudBeeds 提供的示例。

大多数(或可能全部?)其他异常甚至没有 getCauses() 方法,该方法当然会从 catch block 内抛出另一个异常。

此外,正如您已经提到的,仅捕获所有异常并不是一个好主意。

编辑:顺便说一下:进一步向下滚动该帖子 - 在评论中 - 您会发现一个捕获 FlowInterruptedException 的示例。

关于Jenkins 超时/中止异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51260440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com