У меня есть node.js Project, который я запускаю как Docker -Container в разных средах (локальная, рабочая, производственная) и поэтому настраиваю его с помощью .env
-Files. Как всегда советовали, я не храню .env
-файлы в моем удаленном репозитории, который называется Gitlab. Мои производственные и промежуточные системы работают как кластер kubernetes.
Чего я хочу добиться, так это автоматической сборки с помощью CI Gitlab для различных сред (например, stage) в зависимости от ветви коммитов (также называемой stage) Это означает, что когда я отправляю sh в исходное состояние / на сцену, я хочу, чтобы для моей сцены-среды было создано Docker -изображение с соответствующим .env
-файлом в нем.
На моей локальной машине это довольно просто, так как у меня есть все различные .env
-файлы в root -папке моего приложения, я просто использую это в своем Dockerfile
COPY .env-stage ./.env
и все в порядке.
Поскольку я не храню файлы .env в моем удаленном репо, этот подход не работает, поэтому я использовал переменные Gitlab CI и создал переменную с именем DOTENV_STAGE
типа file
с содержимым моего local .env-stage
file.
Теперь моя проблема: как мне получить этот контент в виде файла .env внутри образа docker, который будет собираться gitlab, так как этот файл еще не является файлом в моем репо, но вместо переменной?
I попытался использовать cp
(см. ниже, также в разделе before_script
), чтобы просто скопировать файл в .env
-файл во время процесса сборки, но это, очевидно, не работает.
My текущий этап сборки выглядит следующим образом:
image: docker:git
services:
- docker:dind
build stage:
only:
- stage
stage: build
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
script:
- cp $DOTENV_STAGE .env
- docker pull $GITLAB_IMAGE_PATH-$CI_COMMIT_BRANCH || true
- docker build --cache-from $GITLAB_IMAGE_PATH/$CI_COMMIT_BRANCH --file=Dockerfile-$CI_COMMIT_BRANCH -t $GITLAB_IMAGE_PATH/$CI_COMMIT_BRANCH:$CI_COMMIT_SHORT_SHA .
- docker push $GITLAB_IMAGE_PATH/$CI_COMMIT_BRANCH
Это приводит к
Step 12/14 : COPY .env ./.env
COPY failed: stat /var/lib/docker/tmp/docker-builder513570233/.env: no such file or directory
Я также пробовал cp $DOTENV_STAGE .env
, а также cp $DOTENV_STAGE $CI_BUILDS_DIR/.env
и cp $DOTENV_STAGE $CI_PROJECT_DIR/.env
, но ни один из них не работал.
Итак, часть, которую я на самом деле не знаю: куда мне поместить файл, чтобы сделать его доступным для docker во время сборки?
Спасибо