You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 21:24:04