上次搞完后调试发现,不管ant执行接口的结果是是否为失败,在Jenkins看来执行ant命令这一步始终是成功的。因此配置了失败时发邮件、企业微信通知后,压根就收不到通知,因为根本不会显示失败。
因此要考虑解决,ant执行的接口有失败时,怎么让Jenkins整个流程构建失败,从而达到失败通知的效果。
经过一段时间的思考后,思路如下:
1、ant生成的接口如果有失败,其html报告中会生成执行失败等文字。
2、Jenkins利用脚本读取html报告中的上述文字,如果存在,说明有接口失败,在编写的脚本中控制此次Jenkins流程失败。
3、上面2步骤完成后,以前配置好的流程已经可以做到仅失败时发通知了。
在ant编译后的步骤中加入构建命令Execute Windows batch command。(由于我的Jenkins是部署在windows机器上的)
输入bat命令如下:
cd ResultReporthtml find "Failure Detail" TestReport%BUILD_TIMESTAMP%.html >nul if errorlevel 1 ( echo no Failure Detail ) else ( exit 1 ) exit 0
首先当前在Jenkins任务的工作空间目录下,需进入存放报告的目录。
然后通过find命令,在指定报告html中找关键词。我这边如果有接口执行失败,报告中会生成Failure Detail文案。
通过if命令,如果存在执行失败,则强制exit 1。使得本bat执行失败,从而Jenkins此步骤执行失败。
如果没有接口失败,则给出提示。后面加上exit 0 是因为如果不加这个,Jenkins会默认此脚本执行失败。
如果是linux,则脚本为
cd ResultReport/html grep -n "Failure Detail" TestReport%BUILD_TIMESTAMP%.html if [ $? -eq 1 ];then exit 1 else echo "找到了" fi