我试图找到有关如何在Jenkinsfile管道中捕获用户在jenkins Web UI中取消作业时发生的错误的文档。
我没有post
或try/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
块内的所有内容。
答案 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"
}
}