Как приложение dockerize create-react-app может получить доступ к переменным конвейера выпуска Azure в среде Docker

Вот полный поток проблемы

1) Конвейер сборки Azure создает артефакт (образ докера), используя следующие 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) И помещает образ докера в реестр контейнеров Azure (ACR).

3) Многоступенчатый конвейер выпуска извлекает образ из ACR и развертывает его в службах приложений Azure (QA -> Stage -> Prod).

4) Конвейер выпуска использует значения переменных из группы переменных, определенной в конвейере выпуска, и я ожидаю, что эта переменная должна быть доступна в среде докеров, чтобы она заменяла заполнители переменных ENV в DockerFile.

Но после развертывания все переменные среды, которые используются внутри приложения, остаются неопределенными, не могли бы вы исправить меня, если можно использовать среду докеров так, как я упоминал выше.


person Muhammad Usman    schedule 24.04.2020    source источник


Ответы (1)


Но после развертывания все переменные среды, которые используются внутри приложения, остаются неопределенными, не могли бы вы исправить меня, если можно использовать среду докеров так, как я упоминал выше.

Упомянутый выше способ работать не мог. В процессе развертывания переменные выпуска не автоматически заменяют исходные значения на stage-scope переменные выпуска в DockerFile.

В качестве обходного пути вы можете попробовать Replace Tokens task из Заменить токены, добавить эту задачу в ваши три этапа перед развертыванием задачи. Таким образом, порядок задач на трех этапах должен быть аналогичен следующему: Replace Tokens task для установки переменных выпуска в DockerFile => сборка докеров и push => задача развертывания.

Чтобы использовать эту задачу, ваш 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, другой способ - передать значение в аргументах командной строки. Вы можете проверить этот похожий пост для получения дополнительных сведений.

person LoLance    schedule 28.04.2020