我正在为Jenkins设置声明性管道。在我的post
部分中,我使用slackSend
通知我的团队构建已损坏。我想包括失败原因。这可以在env
或currentBuild
或其他地方使用吗?我在文档中没有看到任何内容,但似乎是一个常见的用例
我已经看过一些关于使用currentBuild.rawBuild.getLog(10)
的帖子,但这有用,但它只是填充了太多的信息。我需要了解实际的异常
答案 0 :(得分:2)
另一种方法是use a catchError
或至少a try/catch
然后,作为in this answer,您可以收到错误消息:String error = "${e}";
关于catchError,您可以将可能失败的每一步都包装到catchError
函数中。如果发生错误,则会将build.result
设置为FAILURE,并继续构建。
请参阅catchError
,其中指出只有try/catch
方法可能有助于捕获实际错误e
(及其字符串)。
然后,您可以将该错误字符串添加到全局变量中,然后您的post
步骤可以访问
这比currentBuild.rawBuild.getLog(10)
更简洁和/或更精确。
答案 1 :(得分:0)
如果您可以调用curl命令,这就是我最近在bash脚本中使用的方法。
full_error_msg=$(curl -s -k -X GET $url/job/$job_name/lastBuild/consoleText 2> /dev/null | tac | grep Error | head -n 2 | tr -d '\n')
由于错误消息通常在构建结束时出现,因此我使用tac命令翻转输出,使用grep替换包含“ Error”的行,然后在接下来的两行中删除这两个Error行之间的回车符。