如何检查Dockerfile中单个环境变量的多参数是否已填充
解决方案
方法一:拆分变量单独校验(推荐)
把每个参数对应的变量单独定义,逐个校验非空后再组合成JAVA_OPTS,逻辑清晰且易排查问题:
# CI/CD直接填充这三个独立变量 ENV MY_KEYSTORE=${blah1} ENV MY_API=${blah2} ENV SALT=${blah3} # 逐个检查变量是否为空,为空则终止构建 RUN if [ -z "$MY_KEYSTORE" ]; then echo 'MY_KEYSTORE must be specified. Exiting.'; exit 1; fi RUN if [ -z "$MY_API" ]; then echo 'MY_API must be specified. Exiting.'; exit 1; fi RUN if [ -z "$SALT" ]; then echo 'SALT must be specified. Exiting.'; exit 1; fi # 组合生成最终的JAVA_OPTS ENV JAVA_OPTS="-DmyKeyStore=$MY_KEYSTORE -DmyApi=$MY_API -Dsalt=$SALT"
方法二:直接解析JAVA_OPTS字符串校验
如果不想调整原有变量结构,可以直接对JAVA_OPTS内容做正则匹配,确保每个-D参数后有非空值:
ENV JAVA_OPTS="-DmyKeyStore=${blah1} -DmyApi=${blah2} -Dsalt=${blah3}" # 批量校验每个参数的有效性 RUN set -e; \ # 检查myKeyStore参数是否有非空值 if ! echo "$JAVA_OPTS" | grep -qE '-DmyKeyStore=\S+'; then \ echo 'myKeyStore parameter is missing or empty. Exiting.'; \ exit 1; \ fi; \ # 检查myApi参数是否有非空值 if ! echo "$JAVA_OPTS" | grep -qE '-DmyApi=\S+'; then \ echo 'myApi parameter is missing or empty. Exiting.'; \ exit 1; \ fi; \ # 检查salt参数是否有非空值 if ! echo "$JAVA_OPTS" | grep -qE '-Dsalt=\S+'; then \ echo 'salt parameter is missing or empty. Exiting.'; \ exit 1; \ fi
注意事项
- 方法一的可维护性更强,后续新增参数只需添加对应变量和校验步骤;
- 方法二中的正则
\S+匹配非空白字符,若你的参数值包含空格(通常会用引号包裹),需要调整正则为-DmyKeyStore="[^"]+"这类格式,适配实际场景。
内容的提问来源于stack exchange,提问作者Yoooo
相关产品推荐
相关产品推荐

