Получите данные Build.Repository.LocalPath и используйте их в моем DockerFile

Я хочу получить данные из переменной Build.Repository.LocalPath и использовать их в своем Dockerfile, но он показывает мне и ошибку.

Это мой докерфайл:

FROM microsoft/aspnet:latest

COPY "/${Build.Repository.LocalPath}/NH.Services.WebApi/bin/Release/Publish/" /inetpub/wwwroot

Я получаю эту ошибку:

Step 2/9 : COPY "/${Build.Repository.LocalPath}/NH.Services.WebApi/bin/Release/Publish/" /inetpub/wwwroot
failed to process "\"/${Build.Repository.LocalPath}/NH.Services.WebApi/bin/Release/Publish/\"": missing ':' in substitution
##[error]C:\Program Files\Docker\docker.exe failed with return code: 1

Я пробовал много способов, поставив эту строку:

COPY "/${Build.Repository.LocalPath}/NH.Services.WebApi/bin/Release/Publish/" /inetpub/wwwroot
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
2
0
542
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

переменные сборки недоступны в файле докеров, но это не имеет значения, как если бы вы поместили файл докеров в корень репо, вы можете использовать относительный путь, так что это сработает:

COPY "/NH.Services.WebApi/bin/Release/Publish/" /inetpub/wwwroot
Ответ принят как подходящий

Вы можете добавить в Dockerfile аргумент:

ARG path

В задаче Azure DevOps Docker добавьте аргумент:

-task: Docker@2
 inputs:
   command: build
   arguments: --build-arg path=$(Build.Repository.LocalPath)

Теперь Dockerfile знает значение переменной, и вы можете использовать его, например:

FROM ubuntu:latest
ARG path
ECHO $path

Результаты:

Step 3/13 : RUN echo $path
---> Running in 213dsa3dacv
/home/vsts/work/1/s

Но если вы попытаетесь скопировать приложение таким образом:

FROM microsoft/aspnet:latest
ARG path
COPY $path/README.md /inetpub/wwwroot

Вы получите сообщение об ошибке:

COPY faild: CreateFile \?\C:\ProgramData\docker\tmp\docker-builder437597591\_work\1\s\README.md: The system cannot find the path specified.

Это потому, что Docker создает образ во временной папке и копирует туда исходники, но не копирует папки агента (_work/1/s), поэтому лучше всего просто указать относительный путь, где существует Dockerfile, например (если Dockerfile существует с README.md):

FROM microsoft/aspnet:latest
COPY README.md /inetpub/wwwroot

Другие вопросы по теме