如何在Jenkinsfile中捕获手动UI取消作业

时间:2017-04-24 23:36:00

标签: jenkins groovy jenkins-pipeline

我试图找到有关如何在Jenkinsfile管道中捕获用户在jenkins Web UI中取消作业时发生的错误的文档。

我没有posttry/catch/finally方法工作,只有在构建中出现故障时才能使用。

当有人取消工作时,这会导致资源无法释放。

我今天所拥有的是声明性管道中的脚本,如下所示:

pipeline {
  stage("test") {
    steps {
      parallell (
        unit: {
          node("main-builder") {
            script {
              try { sh "<build stuff>" } catch (ex) { report } finally { cleanup }
            }
          }
        }
      )
    }
  }
}

因此,当从UI手动取消作业时,忽略catch(ex)finally块内的所有内容。

2 个答案:

答案 0 :(得分:6)

非声明性方法:

当您中止管道脚本构建时,将抛出类型org.jenkinsci.plugins.workflow.steps.FlowInterruptedException的异常。释放catch块中的资源并重新抛出异常。

import org.jenkinsci.plugins.workflow.steps.FlowInterruptedException

def releaseResources() {
    echo "Releasing resources"
    sleep 10
}

node {
    try {
        echo "Doing steps..."
        sleep 20
    } catch (FlowInterruptedException interruptEx) {
        releaseResources()
        throw interruptEx
    }
}

陈述性方法:

相同,但在script {} steps的{​​{1}}块内。不是最好的解决方案,而是我已经测试并开始工作的解决方案。

答案 1 :(得分:0)

您可以在舞台上添加发布触发器“清理”:

post {
    cleanup {
        script { ... }
        sh "remove lock"
    }
}