gpt4 book ai didi

docker - 如何在dockerfile中动态将环境变量设置为true

转载 作者:行者123 更新时间:2023-12-02 19:49:13 25 4
gpt4 key购买 nike

我的应用程序具有功能标记,我想将其npm build动态设置为true。
本质上我想做类似的事情COMPILE_ASSETS=true npm buildNEW_EMAILS=true npm build,仅从CI动态生成。

我有一个将捕获该标志的CI管道,但是在将其设置为true并在Dockerfile中运行npm时遇到了麻烦。

我的Dockerfile-

FROM ubuntu:bionic
ARG FEATURE_FLAG
RUN if [ "x$FEATURE_FLAG" = "x" ] ; \
then npm run build ; \
else $FEATURE_FLAG=true npm run build; \
fi


这与-
docker build --no-cache --rm -t testing --build-arg FEATURE_FLAG=my_feature_flag .(我想保持原样)

在CI我得到
/bin/sh: 1: my_feature_flag=true: not found
我已经尝试过各种形式的else语句-
  • else export $FEATURE_FLAG=true npm run build;(这实际上看起来像在我的Mac上正常运行,但在export: : bad variable name
  • 的CI中失败
  • else ${FEATURE_FLAG:+$FEATURE_FLAG=true} npm build;
  • else eval(`$FEATURE_FLAG=true npm build`);
  • `else env $ FEATURE_FLAG = true bash -c'npm build';

  • 这些都失败了:(

    我试图完全重新处理Dockerfile并将标志设置为true作为ENV-
    ARG FEATURE_FLAG
    ENV FF_SET_TRUE=${FEATURE_FLAG:+$FEATURE_FLAG=true}
    ENV FF_SET_TRUE=${FF_SET_TRUE:-null}
    RUN if [ "$FF_SET_TRUE" = "null" ] ; \
    then npm build; \
    else $FF_SET_TRUE npm build; \
    fi

    什么都行不通!这仅仅是bash的限制吗?运行命令之前无法扩展变量?

    还是使用Docker无法做到这一点?

    最佳答案

    你的意思是:

    FROM ubuntu:bionic
    ARG FEATURE_FLAG
    RUN set -eux; \
    if [ "x$FEATURE_FLAG" == "x" ] ; then \
    npm run build ; \
    else \
    eval $($FEATURE_FLAG=true npm run build); \
    fi

    您需要将命令包装在eval中,以使变量根据传递的ARGS进行扩展。

    关于docker - 如何在dockerfile中动态将环境变量设置为true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61946915/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com