【问题标题】:How dockerize create-react-app can access to azure release pipeline variables in docker environmentdockerize create-react-app 如何在 docker 环境中访问 azure release 管道变量
【发布时间】:2025-11-26 03:15:02
【问题描述】:

这是问题的完整流程

1) Azure Build 管道使用以下DockerFile 创建工件(docker 映像)

FROM hub.docker.prod.private.com/library/node:10.16-alpine as buildImage
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

ENV PATH /app/node_modules/.bin:$PATH
ENV REACT_APP_SERVER_URL=${REACT_APP_SERVER_URL}
ENV REACT_APP_AD_APP_ID=${REACT_APP_AD_APP_ID}
ENV REACT_APP_REDIRECT_URL=${REACT_APP_REDIRECT_URL}
ENV REACT_APP_AUTHORITY=${REACT_APP_AUTHORITY}

COPY package.json /usr/src/app/
RUN npm install
RUN npm install react-scripts@3.0.1 -g
COPY . /usr/src/app
RUN npm run build

FROM hub.docker.prod.private.com/library/nginx:1.15.12-alpine
COPY --from=buildImage /usr/src/app/build /usr/share/nginx/html
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx/nginx.conf /etc/nginx/conf.d
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

2) 并将 docker 镜像推送到 Azure 容器注册表 (ACR)。

3) 多阶段发布管道从ACR 提取图像并部署在 azure 应用服务上 (QA -> Stage -> Prod)。

4) 发布管道正在使用发布管道中定义的变量组中的变量值,我是 期望这些变量应该在 docker 环境中可用,以便它替换 ENVDockerFile 中的变量占位符。

但是部署后应用程序内部使用的所有环境变量仍然未定义,如果可以按照我上面提到的方式使用 docker 环境,请纠正我。

【问题讨论】:

    标签: azure docker azure-devops create-react-app azure-pipelines-release-pipeline


    【解决方案1】:

    但是在部署后所有内部使用的环境变量 应用程序仍未定义,如果是,请纠正我 可以按照我上面提到的方式使用docker环境。

    上面提到的方法是行不通的。在部署过程中,发布变量不会自动用 DockerFile 中的stage-scope 发布变量替换原始值。

    作为一种解决方法,您可以尝试Replace Tokens 中的Replace Tokens task,在部署任务之前的三个阶段中添加此任务。所以你三个阶段的任务顺序应该类似于:Replace Tokens task to set release variables in DockerFile=>docker build and push=>deploy task。

    要使用这个任务,你的 Dockerfile 应该是:

    ENV REACT_APP_SERVER_URL=#{REACT_APP_SERVER_URL}#
    ENV REACT_APP_AD_APP_ID=#{REACT_APP_AD_APP_ID}#
    ENV REACT_APP_REDIRECT_URL=#{REACT_APP_REDIRECT_URL}#
    ENV REACT_APP_AUTHORITY=#{REACT_APP_AUTHORITY}#
    

    有关此任务如何工作的详细信息,请查看我的another issue

    如果您不想对 Dockerfile 本身进行任何更改,另一种方法是在命令行参数中传递值。您可以查看this similar post了解更多详情。

    【讨论】: