Env теряется при сборке образа докера из Gitlab CI - PullRequest
1 голос
/ 26 сентября 2019

Я пытаюсь построить свой проект React / NodeJS, используя Docker и Gitlab CI.

Когда я строю свои изображения вручную, я использую файл .env, содержащий env vars, и все в порядке.

docker build --no-cache -f client/docker/local/Dockerfile . -t espace_client_client:local
docker build --no-cache -f server/docker/local/Dockerfile . -t espace_client_api:local

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

Вот мой CI gitlab:

image: node:10.15
variables:
  REGISTRY_PACKAGE_CLIENT_NAME: registry.gitlab.com/company/espace_client/client
  REGISTRY_PACKAGE_API_NAME: registry.gitlab.com/company/espace_client/api
  REGISTRY_URL: https://registry.gitlab.com
  DOCKER_DRIVER: overlay
  # Client Side
  REACT_APP_API_URL: https://api.espace-client.company.fr
  REACT_APP_DB_NAME: company
  REACT_APP_INFLUX: https://influx-prod.company.fr
  REACT_APP_INFLUX_LOGIN: admin
  REACT_APP_HOUR_GMT: 2


stages:
  - publish

docker-push-client:
  stage: publish
  before_script:
    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $REGISTRY_URL
  image: docker:stable
  services:
    - docker:dind
  script:
    - docker build --no-cache -f client/docker/prod/Dockerfile . -t $REGISTRY_PACKAGE_CLIENT_NAME:latest
    - docker push $REGISTRY_PACKAGE_CLIENT_NAME:latest

Вот файл Docker для клиента

FROM node:10.15-alpine
WORKDIR /app
COPY package*.json ./
ENV NODE_ENV production

RUN npm -g install serve && npm install
COPY . .
RUN npm run build
EXPOSE 3000
CMD [ "serve", "build", "-l", "3000" ]

Почему существует такая разница между процессом 2?

1 Ответ

1 голос
/ 26 сентября 2019

Согласно вашему ответу в комментариях, Переменные среды GitLab CI / CD не решают вашу проблему.Среда Gitlab CI актуальна только в контексте GitLab Runner , который создает и | или развертывает ваше приложение.

Итак, если вы собираетесь распространять в приложении переменные Env, есть несколько способов.доставить переменные из .gitlab-cy.yml в ваше приложение:

ENV инструкция Dockerfile

Например

FROM node:10.15-alpine
WORKDIR /app
COPY package*.json ./
ENV   NODE_ENV production
ENV   REACT_APP_API_URL: https://api.espace-client.company.fr
ENV   REACT_APP_DB_NAME: company
ENV   REACT_APP_INFLUX: https://influx-prod.company.fr
ENV   REACT_APP_INFLUX_LOGIN: admin
ENV   REACT_APP_HOUR_GMT: 2

RUN npm -g install serve && npm install
COPY . .
RUN npm run build
EXPOSE 3000
CMD [ "serve", "build", "-l", "3000" ]

docker-compose environment директива

web:
  environment:
    - NODE_ENV=production
    - REACT_APP_API_URL=https://api.espace-client.company.fr
    - REACT_APP_DB_NAME=company
    - REACT_APP_INFLUX=https://influx-prod.company.fr
    - REACT_APP_INFLUX_LOGIN=admin
    - REACT_APP_HOUR_GMT=2

Докер run -e

(Не ваш случай, только для информации)

docker -e REACT_APP_DB_NAME="company"

PS Попробуйте переменные CI Gitlab

Существует удобный способ хранения переменных вне вашего кода: Пользовательские переменные среды

Вы можете установить их легко из интерфейса пользователя .Это может быть очень мощным, поскольку его можно использовать для сценариев без необходимости указывать само значение.

creating-a-custom-environment-variable

...