声明性与脚本处理失败

bdo*_*uez 6 jenkins jenkins-pipeline

我在Declarative Pipeline上看到它是通过"post"部分完成的,非常简单,例如'always','failure',......:

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

谁能帮我这个?

例如,如果我这样做:

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

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

Mat*_*u L 4

您的代码按预期工作:

\n\n
node { try { error \'Test error\' } catch (ex) { echo \'Error handled\' } }\n
Run Code Online (Sandbox Code Playgroud)\n\n

给出:

\n\n
[Pipeline] node\nRunning on ma\xc3\xaetre in /var/lib/jenkins/workspace/test-pipeline2\n[Pipeline] {\n[Pipeline] error\n[Pipeline] echo\nError handled\n[Pipeline] }\n[Pipeline] // node\n[Pipeline] End of Pipeline\nFinished: SUCCESS\n
Run Code Online (Sandbox Code Playgroud)\n\n

说明:

\n\n
    \n
  1. 错误“测试错误”不应该记录任何内容。它相当于 Java throw new Exception("Test error")。请参阅https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#code-error-code-error-signal
  2. \n
  3. catch捕获此异常,并按预期记录消息。在此块之后,不会向 Jenkins 运行程序抛出任何错误,因此作业以成功结束。
  4. \n
\n\n

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

\n