Azure DevOps копирование файла .env в образ docker

#docker #azure-devops

#докер #azure-devops

Вопрос:

Я пытаюсь создать конвейер с Azure DevOps, и одна из задач — скопировать .env файл в образ docker.

Dockerfile Выглядит следующим образом:

 FROM node

WORKDIR /nodebuild
ADD frontend /nodebuild

# Set environment variables from .env during node build
# so that the app uses the production location for static files
ADD .env /nodebuild
RUN export $(grep -v '^#' .env | xargs) amp;amp; npm install amp;amp; npm audit fix amp;amp; npm run build
  

Однако, поскольку .env содержит мой секрет, я использую Защищенные файлы для хранения файла в Azure DevOps.

Теперь я пытаюсь сослаться на этот файл из моего Dockerfile, как я мог это сделать?

Комментарии:

1. Этот механизм предназначен для > Использования библиотеки защищенных файлов для хранения таких файлов, как сертификаты подписи, профили подготовки Apple, файлы хранилища ключей Android и SSH-ключи, на сервере без необходимости передавать их в исходный репозиторий. Защищенные файлы определяются и управляются на вкладке Библиотека в Azure Pipelines. Если вы храните там свои секреты, вам не следует встраивать их в Docker image.

2. @KrzysztofMadej если .env это большой файл, я бы рекомендовал управлять им с помощью Защищенных файлов. Некоторые процессы при создании образа нуждаются в секрете (например, действия, связанные с базами данных). В конце процесса сборки мы можем удалить .env из imange. Что касается того, как это сделать, смотрите ответ ниже.

Ответ №1:

Для загрузки env-файла на компьютер агента можно добавить задачу «Загрузить защищенный файл«.

После загрузки используйте значение имени, заданное для задачи (или «Имя ссылки» в классическом редакторе), чтобы указать путь к защищенному файлу на компьютере агента. Например, если задаче присвоено имя mySecureFile, на его путь можно ссылаться в конвейере как $(mySecureFile.secureFilePath). Кроме того, загруженные защищенные файлы можно найти в каталоге, указанном с помощью $(Agent.Временный каталог)

Затем вы можете добавить задачу копирования файлов, чтобы скопировать файл .env, загруженный вышеупомянутой задачей, в контекст сборки docker. Для примера ниже:

 steps:
- task: DownloadSecureFile@1
  displayName: 'Download secure file'
  inputs:
    secureFile: .env

- task: CopyFiles@2
  displayName: 'Copy Files to: $(System.DefaultWorkingDirectory)'
  inputs:
    SourceFolder: '$(Agent.TempDirectory)'
    Contents: .env
    TargetFolder: '$(System.DefaultWorkingDirectory)'
  

Если папка $(System.DefaultWorkingDirectory) (т.Е. c:agent_work1s ) является контекстом сборки docker. Затем вы можете обратиться к файлу .env из своего Dockerfile.

Комментарии:

1. Спасибо! Это именно то, что я только что сделал, и это работает отлично!