gradle shell script dockerfile



在dockerfile中获取退出代码出现问题

RUN bash -c " 
if [ $FLAVOR = E2ETEST ] ; then 

./gradlew clean :app:testDevDebugUnitTest --tests abcTest;
./gradlew clean :app:testDevDebugUnitTest --tests cdeTest -PtestType="e2e" executeE2ETests; 
./gradlew clean :app:testDevDebugUnitTest --tests defTest ; 

风味来自于yaml文件我怎样才能得到3 gradle命令

的退出代码?

bash中,您可以通过$?获得前一个命令的退出代码。例句:

bash -c "exit 12"; echo $?

将打印12.

在你的情况下,你可以保存退出代码的变量,然而,它可以得到一些问题,因为Dockerfile的专业(你不能导出它们到环境变量在下一个RUN中使用)。根据您想要如何使用它,您可以,例如,将其写入文本文件,或在该脚本中执行其他操作:

RUN bash -c " 
if [ "$FLAVOR" = E2ETEST ] ; then 
./gradlew clean :app:testDevDebugUnitTest --tests abcTest; EX1="$?"; 
./gradlew clean :app:testDevDebugUnitTest --tests cdeTest -PtestType="e2e" executeE2ETests; EX2="$?"; 
./gradlew clean :app:testDevDebugUnitTest --tests defTest; EX3="$?"; 
echo $EX1 $EX2 $EX3" > /tmp/exit_codes; 
fi"

最好将$FLAVOR放在括号中,因为如果$FLAVOR为空,则会产生错误。$被转义,因为docker在解析时展开表达式。

如果您只需要检查命令是否成功,只需将;替换为&&(如果任何命令以非零退出代码退出,则RUN将失败):

RUN bash -c " 
if [ "$FLAVOR" = E2ETEST ] ; then 
./gradlew clean :app:testDevDebugUnitTest --tests abcTest && 
./gradlew clean :app:testDevDebugUnitTest --tests cdeTest -PtestType="e2e" executeE2ETests && 
./gradlew clean :app:testDevDebugUnitTest --tests defTest; 
fi"

运行所有命令并在其中任何一个失败时获得退出代码1,执行

RUN bash -c " 
if [ "$FLAVOR" = E2ETEST ] ; then 
./gradlew clean :app:testDevDebugUnitTest --tests abcTest; EX1="$?"; 
./gradlew clean :app:testDevDebugUnitTest --tests cdeTest -PtestType="e2e" executeE2ETests; EX2="$?"; 
./gradlew clean :app:testDevDebugUnitTest --tests defTest; EX3="$?"; 
if [ $EX1 == 0 ] && [ $EX2 == 0 ] && [ $EX3 == 0 ]; then exit 0; else exit 1; fi; 
fi"

相关内容

  • 没有找到相关文章

最新更新