#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. Спасибо! Это именно то, что я только что сделал, и это работает отлично!