以下是问题的完整流程
1) Azure Build流水线使用以下方法创建一个工件(docker镜像 DockerFile
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 [email protected] -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环境中可以使用,这样它就可以取代原来的变量组。ENV
中的变量占位符 DockerFile
.
但是在部署后,应用程序内使用的所有环境变量仍然没有定义,请你纠正我,是否可以使用我上面提到的方式docker环境。
但是部署后,应用内使用的所有环境变量仍然没有定义,请你纠正我,是否可以用我上面提到的方式使用docker环境。
上面提到的方式不可能成功。在部署过程中,发布变量 不愿 自动 取而代之 stage-scope
DockerFile中的释放变量。
作为一个变通方法,你可以尝试 Replace Tokens task
从 替换代币在部署任务之前,在你的三个阶段中添加这个任务。所以你的三个阶段的任务顺序应该是类似的。Replace Tokens task
在DockerFile中设置发布变量=>docker build和push=>deploy任务。
要使用这个任务,你的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}#
关于这个任务如何工作的细节,请查看我的 另一个问题.
如果你不想对Dockerfile本身做任何改变,另一种方法是在命令行参数中传递该值。你可以检查 此类似职位 更多细节。