在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"