【问题标题】:Declarative vs Scripted Handling failures声明式与脚本式处理失败
【发布时间】:2017-03-17 16:00:42
【问题描述】:

我在声明式管道上看到它是通过“发布”部分完成的,非常容易使用“总是”、“失败”等条件:

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

但是对于脚本化管道,没有关于它是如何完成的示例:

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

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

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

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

谁能帮我解决这个问题?

例如,如果我这样做:

节点{ 尝试 { 错误'测试错误' } 捕捉(前){ echo '错误处理' } }

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

【问题讨论】:

  • 这里有所有post 步骤的声明和脚本版本:jenkins.io/doc/pipeline/tour/running-multiple-steps/…
  • 感谢 Christopher,文档一团糟。在某些地方有脚本版本的示例,而在其他地方则没有。
  • 嗯,在大多数地方都有脚本示例。如果没有,请针对 WEBSITE 组件打开bug。我更新了这个特定的文档以修复脚本版本,并包括 changed 类型的 post 操作。

标签: jenkins jenkins-pipeline


【解决方案1】:

您的代码按预期工作:

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. error 'Test error' 不应该记录任何东西。它相当于 Java throw new Exception("Test error")。见https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#code-error-code-error-signal
  2. catch 块捕获此异常,并按预期记录消息。在此块之后,不会向 Jenkins 运行器抛出任何错误,因此作业以成功结束。

如果您想将构建标记为失败,则必须在 catch 块中明确执行此操作。您还可以使用 catchError 块为您处理此问题。见:https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#code-catcherror-code-catch-error-and-set-build-result

【讨论】:

    猜你喜欢
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多