Получить данные Build.Repository.LocalPath и использовать их в моем DockerFile - PullRequest
2 голосов
/ 25 мая 2019

Я хочу получить данные из переменной 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

Ответы [ 2 ]

0 голосов
/ 26 мая 2019

Вы можете добавить в 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

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

Ошибка копирования: CreateFile \? \ C: \ ProgramData \ docker \ tmp \ docker-builder437597591 \ _work \ 1 \ s \ README.md: системе не удается найти указанный путь.

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

FROM microsoft/aspnet:latest
COPY README.md /inetpub/wwwroot
0 голосов
/ 25 мая 2019

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

COPY "/NH.Services.WebApi/bin/Release/Publish/" /inetpub/wwwroot
...