繁体   English   中英

gradle shell 脚本 dockerfile

[英]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 在解析过程中扩展了表达式。

如果您只需要检查命令是否成功,只需替换; with && (如果任何命令以非零退出代码退出,则以下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"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM