声明性与脚本处理失败

时间:2017-03-17 16:00:43

标签: jenkins jenkins-pipeline

我在Declarative Pipeline上看到它是通过" post"部分非常简单,例如'总是','失败',...:

https://jenkins.io/doc/book/pipeline/syntax/#post

但是使用Scripted Pipeline并没有关于它是如何完成的例子:

此链接提供了一个示例,但仅适用于"始终"条件

https://jenkins.io/doc/book/pipeline/jenkinsfile/#handling-failures

我看到有关如何设置该结果的文档,但我不明白,因为使用Declarative Pipeline您不必手动设置它,插件提供的命令会为您处理。

https://support.cloudbees.com/hc/en-us/articles/218554077-How-to-set-current-build-result-in-Pipeline

任何人都可以帮我吗?

例如,如果我这样做:

节点{    尝试{      错误'测试错误'    } catch(ex){      echo'错误处理'    } }

它不会触发" FAILURE"自动构建状态,我没有看到回声。为什么呢?

1 个答案:

答案 0 :(得分:4)

您的代码片段按预期工作:

node { try { error 'Test error' } catch (ex) { echo 'Error handled' } }

给出:

[Pipeline] node
Running on maître in /var/lib/jenkins/workspace/test-pipeline2
[Pipeline] {
[Pipeline] error
[Pipeline] echo
Error handled
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

解释:

  1. 错误“测试错误”不应该记录任何内容。它相当于Java 抛出新异常(“测试错误”)。请参阅https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#code-error-code-error-signal
  2. catch 块捕获此异常,并按预期记录消息。在此块之后,Jenkins运行器不会抛出任何错误,因此作业结束为成功。
  3. 如果要将构建标记为失败,则必须在catch块中显式执行此操作。您还可以使用 catchError 块来为您处理此问题。请参阅:https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#code-catcherror-code-catch-error-and-set-build-result