詹金斯超时/中止异常

时间:2018-07-10 08:23:34

标签: jenkins jenkins-pipeline

我们有一个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代码库中都找不到任何东西。

1 个答案:

答案 0 :(得分:5)

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

无法相信这是CloudBeeds提供的示例。

大多数(或可能所有?)其他异常甚至都没有getCauses()方法,该方法当然会从catch块内引发另一个异常。

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

编辑: 顺便说一句:在评论中向下滚动该帖子-您将找到捕获FlowInterruptedException的示例。