Bitbucket流水线配置:测试失败时仍执行SonarQube扫描且标记失败
Bitbucket流水线配置:测试失败仍执行SonarQube并标记流水线失败
可以实现需求,核心是利用Bitbucket Pipelines的continue-on-error参数,配合手动捕获测试退出码来控制最终流水线状态,具体配置方案如下:
配置思路
- 让测试步骤即使失败也不中断流水线,继续执行SonarQube扫描
- 记录测试步骤的退出状态,避免
continue-on-error掩盖失败信息 - SonarQube扫描完成后,根据记录的测试状态决定是否标记整个流水线失败
完整配置示例
pipelines: default: - step: name: 运行Python测试并生成报告 continue-on-error: true # 关键:测试失败不中断流水线 script: # 替换成你的Python测试命令,确保生成XML报告 - pytest --junitxml=test-results.xml # 捕获测试命令的退出码并保存到文件 - echo $? > test_exit_code.txt artifacts: # 保存报告和退出码文件,供后续步骤使用 - test-results.xml - test_exit_code.txt - step: name: 执行SonarQube扫描 script: # 替换成你的SonarQube扫描命令,指定测试报告路径 - sonar-scanner -Dsonar.junit.reportPaths=test-results.xml - step: name: 验证测试结果并标记流水线状态 script: # 读取之前保存的测试退出码 - EXIT_CODE=$(cat test_exit_code.txt) # 如果测试失败(退出码非0),让当前步骤失败,从而标记整个流水线为失败 - if [ $EXIT_CODE -ne 0 ]; then exit $EXIT_CODE; fi
各部分说明
continue-on-error: true:给测试步骤加上这个参数后,无论测试是否失败,流水线都会继续执行后续的SonarQube扫描步骤。- 保存测试退出码:
$?是Linux系统中上一条命令的退出码(0表示成功,非0表示失败),将其写入文件后,后续步骤能准确获取测试的真实状态。 - 最后验证步骤:读取退出码后,如果测试失败就主动退出并返回原错误码,这样整个流水线会被标记为失败(红色),同时SonarQube的扫描任务已经完成。
如果使用的是其他Python测试框架(如unittest),只需调整测试生成XML报告的命令即可,核心逻辑保持不变。
内容的提问来源于stack exchange,提问作者Yak O'Poe
相关产品推荐
相关产品推荐

