获取Build.Repository.LocalPath的数据,并在我的DockerFile中使用它们

时间:2019-05-25 16:42:59

标签: docker azure-devops devops azure-pipelines

我想从变量Build.Repository.LocalPath中获取数据并在我的Dockerfile中使用它,但是它显示了我和错误。

这是我的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 :(得分:0)

构建变量在dockerfile中不可用,但这没关系,就像您将docker文件放在repo根目录中一样,您可以使用相对路径,因此可以使用:

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

答案 1 :(得分:0)

您可以在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),所以最好的办法只是在其中放置一个相对路径例如,存在Dockerfile(如果Dockerfile与README.md存在):

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