我有一个带有管道的Jenkins设置,该管道使用pytest运行一些测试套件。有时测试失败,有时测试环境崩溃(随机HTTP超时,外部库错误等)。作业会解析XML测试结果,但是只要pytest返回非零,构建就会标记为FAILURE。
即使测试失败,我也希望詹金斯从pytest获取退出代码零,但我也希望将其他错误标记为失败。是否有任何pytest选项可以解决此问题?我发现pytest-custom_exit_code,但是它只能抑制空测试套件错误。也许一些詹金斯选项或bash片段?
我的Groovy管道的简化版本:
pipeline {
stages {
stage ('Building application') {
steps {
sh "./build.sh"
}
}
stage ('Testing application') {
steps {
print('Running pytest')
sh "cd tests && python -m pytest"
}
post {
always {
archiveArtifacts artifacts: 'tests/output/'
junit 'tests/output/report.xml'
}
}
}
}
}
我试图捕获退出代码1(表示some tests failed),但詹金斯仍然收到退出代码1,并将构建标记为FAILURE:
sh "cd tests && (python -m pytest; rc=\$?; if [ \$rc -eq 1 ]; then exit 0; else exit \$rc; fi)"
答案 0 :(得分:1)
我的解决方案是在pytest-custom-exit-code中自己实现支持并创建请求请求。
从插件的0.3.0版本开始,我可以使用pytest --suppress-tests-failed-exit-code
来获得所需的行为。
答案 1 :(得分:1)
您的尝试不起作用,因为Jenkins在启用errexit(-e)选项的情况下运行外壳程序,这会导致外壳程序在pytest命令之后立即退出,直到到达if语句。但是有一种方法可以工作,因为它作为一条语句执行:https://stackoverflow.com/a/31114992/1070890
因此您的构建步骤应如下所示:
sh 'cd tests && python -m pytest || [[ $? -eq 1 ]]'