如何通过bash脚本检测ant / maven的构建错误?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过bash脚本检测ant / maven的构建错误?相关的知识,希望对你有一定的参考价值。
我正在编写一个bash脚本来自动化构建过程。有两个主要的构建块,一个是蚂蚁任务,一个是普通的老mvn clean install
。当这两个构建过程中出现构建错误时,我想要做一些事情。
问题是,这些构建将不时包含测试失败或错误,但最终结果是成功的。而且我相信这些进程返回的状态代码($?)应该为0,无论构建失败还是成功,我都错了。
那么,我的脚本检测最终结果(构建失败/成功)的最佳方法是什么,而不会在中间构建(测试错误等)期间捕获错误信息?
mvn clean test
if [[ "$?" -ne 0 ]] ; then
echo 'could not perform tests'; exit $rc
fi
$?
是一个特殊的shell变量,它包含最近最近执行的命令的退出代码(无论是否成功终止)。-ne
代表“不平等”。所以我们在这里测试mvn clean
的退出代码是否不等于零。
针对Maven 2返回错误返回码(即始终返回0)存在一些问题。特别是在Maven 2.0.9中修复的MNG-3651。
在旧版本中,mvn.bat以此行结束:
exit /B %ERROR_CODE%
从Maven 2.0.9起,最后一行改为:
cmd /C exit /B %ERROR_CODE%
因此,如果构建失败,则返回非0返回码。在构建错误的情况下,返回码为1.如果您无法升级到2.0.9+,则可以考虑如上所述修改mvn.bat以返回正确的代码。
根据Ant manual:
ant启动脚本(在他们的Windows和Unix版本中)返回java程序的返回代码。因此,成功的构建返回0,失败的构建返回其他值。
Maven还会在出错时返回非零退出代码。这里是a link,展示了如何使用Maven Invocation API查询此状态。
因此在我看来,您应该能够在脚本中显式处理返回代码。大概你可以忽略与测试等有关的错误代码,如果你不关心这些错误代码。
Ant中的exec
错误代码是特定于操作系统的。这些可能会帮助你:
这正是我为了得到你想要的结果所做的。
<exec executable="${env.M2_HOME}/bin/mvn" dir="${basedir}"
failonerror="true" osfamily="unix">
<arg value="-DskipTests=${argSkipTests}"/>
<arg value="-Doffline=${argOffline}"/>
<arg line="${projectsLine}"/>
<arg line="${resumeFromLine}"/>
<arg line="${alsoMakeLine}"/>
<arg line="${alsoMakeDependentsLine}"/>
<arg line="${commandsLine}"/>
</exec>
unix / linux的正确解决方案:
mvn clean install
rc=$?
if [ $rc -ne 0 ] ; then
echo Could not perform mvn clean install, exit code [$rc]; exit $rc
fi
“if”语句本身就是一个命令,如果成功,它将重置$?变量为0.相同的回声。因此,您必须使用中间本地var,例如$ rc来存储来自“mvn clean install”的返回代码,然后它也可以传递给“exit”命令。
以上是关于如何通过bash脚本检测ant / maven的构建错误?的主要内容,如果未能解决你的问题,请参考以下文章
考虑到它的参数,如何检测bash脚本是不是已经在运行[重复]