非声明性方法:
当您中止管道脚本生成时,
org.jenkinsci.plugins.workflow.steps.FlowInterruptedException将引发类型异常。
catch阻塞释放资源,然后重新引发异常。
import org.jenkinsci.plugins.workflow.steps.FlowInterruptedExceptiondef releaseResources() { echo "Releasing resources" sleep 10}node { try { echo "Doing steps..." sleep 20 } catch (FlowInterruptedException interruptEx) { releaseResources() throw interruptEx }}声明式方法(更新11/2019):
相同,但一个内script {}的块steps
的stage
。不是最巧妙的解决方案,而是我已经测试并开始工作的解决方案。
在最初回答时,没有条件
aborted或
cleanup后置条件(而IIRC仅
pipeline具有后置条件,但
stage没有条件)。
根据Jenkins声明性管道文档,在
post部分下:
cleanup在评估所有其他发布条件之后,无论管道或阶段的状态如何,都请在此发布条件中运行步骤。
因此,无论管道是否中止,这都是释放资源的好地方。
def releaseResources() { echo "Releasing resources" sleep 10}pipeline { agent none stages { stage("test") { steps { parallel ( unit: { node("main-builder") { script { echo "Doing steps..." sleep 20 } } } ) } post { cleanup { releaseResources() } } } }}


