我正在尝试让Jenkins在junit测试失败时发送Slack消息,但是在测试失败时它不会执行任何其他操作。
我在Multibranch Pipeline
工作中在Jenkinsfile中使用脚本化管道。
这是管道中的测试阶段:
node {
// setup and build Docker image
stage("Test") {
slackSend message: "Running tests!"
sh("docker run --rm -i \
-v '${env.WORKSPACE}/tests/results/':/tmp/tests/results \
${image} python3 manage.py test")
try {
slackSend message: "Checking tests!"
junit 'tests/results/*.xml'
} catch(err) {
slackSend message: "Error in tests!"
} finally {
slackSend message: "Finally in tests!"
}
}
}
我故意添加了一个失败的测试用例。我希望看到的是所有四个Slack消息:Running tests!
,Checking tests!
,Error in tests!
和Finally in tests!
,但是我看到的只是Running tests!
,即使Checking
消息位于junit
行之前。
如果测试没有任何失败,那么我会看到Running
,Checking
和Finally
松弛消息,正如我期望的那样。
当junit测试失败时,为什么try/catch
不执行?
答案 0 :(得分:2)
junit Pipeline命令不会生成异常,它仅准备/显示单元测试报告。在您的情况下,“真实单元测试失败”是在docker命令执行期间,因此您只需检查docker run返回代码。加上检查,测试失败时python3命令还会返回错误代码。
检查此答案以弄清楚如何获取docker run返回代码 How to get the numeric exit status of an exited docker container?