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


переменные сборки недоступны в файле докеров, но это не имеет значения, как если бы вы поместили файл докеров в корень репо, вы можете использовать относительный путь, так что это сработает:
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