Dockerfile中如何获取条件分支内三条gradlew命令的执行退出码
Dockerfile中获取多条gradlew命令各自退出码的方案
你可以通过shell内置变量$?捕获每条命令执行后的退出状态码,存入自定义变量后按需打印或做后续判断处理,修改后的RUN指令示例如下:
# 先声明FLAVOR为构建参数,若为运行时变量替换为ENV即可 ARG FLAVOR RUN bash -c " \ declare -a exit_codes; \ if [ \"$FLAVOR\" = \"E2ETEST\" ] ; then \ ./gradlew clean :app:testDevDebugUnitTest --tests abcTest; \ exit_codes[0]=$?; \ ./gradlew clean :app:testDevDebugUnitTest --tests cdeTest -PtestType=\"e2e\" executeE2ETests; \ exit_codes[1]=$?; \ ./gradlew clean :app:testDevDebugUnitTest --tests defTest ; \ exit_codes[2]=$?; \ # 打印所有测试的退出码,可直接在构建日志中查看 echo \"=== 测试任务退出码汇总 ===\"; \ echo \"abcTest 退出码:\${exit_codes[0]}\"; \ echo \"cdeTest 退出码:\${exit_codes[1]}\"; \ echo \"defTest 退出码:\${exit_codes[2]}\"; \ # 可选:任意测试失败则终止构建,返回对应非0退出码 for code in \"\${exit_codes[@]}\"; do if [ \$code -ne 0 ]; then exit \$code; fi; \ done; \ fi \ "
注意事项
$?是shell内置变量,存储上一条执行完成命令的退出状态,0为执行成功,非0为执行失败- 确保
FLAVOR参数已提前在Dockerfile中通过ARG(构建阶段生效)或ENV(运行阶段生效)声明,yaml中的参数值需要对应传入到构建/运行流程中 - 如果不需要测试失败就终止构建,删除可选的循环判断逻辑即可,所有退出码仍会正常打印在构建日志中
内容的提问来源于stack exchange,提问作者Sidharth Bamba
相关产品推荐
相关产品推荐

