我为自己的需求构建了一些更简单的东西,尽管它仍然需要每个阶段中的代码片段。
我在这里寻找一种不重复在每个阶段的
post
部分中获取错误的方法,并且我喜欢上面的解决方案。我可能会将其他答案中的部分内容合并到我的库中。
我有一个
env.informationalMessages
变量,它会随着每次运行结束时的通知电子邮件一起发送。
在每个阶段中,您都要进行一个不成功的
post
部分。这应该捕获
failed
,
aborted
,
unstable
结果。清理在任何其他后置条件之后运行。
stage ('some stage name') {
steps { ... }
post {
unsuccessful {
addStageResultToInfoMessages()
}
cleanup {
}
}
}
vars/addStageResultToInfoMessages.groovy
:
def call() {
addToInfoMessages("${currentBuild.result} in stage '${STAGE_NAME}'.")
}
vars/addToInfoMessages.groovy
def call(String message) {
env.informationalMessages += "${message}\n"
}
然后在管道的末端,另一个 post
部分:
post {
unsuccessful {
addToInfoMessages(getErrorMessage())
}
cleanup {
notifyEmail()
}
}
vars/getErrorMessage.groovy
从 Jenkins API 中获取原始控制台文本,并查找文本 'ERROR:
'。Jenkins 中过时的 Groovy 不支持对列表进行空安全导航,因此您必须使用老式方法。
def call() {
response = httpRequest ignoreSslErrors: true, url: "${BUILD_URL}consoleText"
err = response.getContent().findAll(/.*ERROR:.*/)
if (err) { return err[-1].split('Z] ')[1] }
else { return 'Error not found' }
}
只是另一种做法。