繁体   English   中英

在 Azure DevOps 中将工件传递给 Docker 任务

[英]Pass artifact to Docker task in Azure DevOps

我在 dotnet 中有一个项目,我想在 Azure DevOps 中进行容器化。 我使用了https://github.com/MicrosoftDocs/mslearn-tailspin-spacegame-web-deploy (以及教程: https : //docs.microsoft.com/en-us/learn/modules/create-multi-stage- pipeline/6-promote-staging ) 作为测试。 我想保留包含 DotNetCoreCLI@2 恢复、构建和发布命令的原始多级管道,我只想将工件复制到容器中,指向正确的 dll。

我的 dockerfile 看起来像这样:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
ARG workdir
COPY /$workdir App/
WORKDIR /App
ENTRYPOINT ["dotnet", "Tailspin.SpaceGame.Web.dll"]

即使我在 docker 任务中使用作为传递参数的 /$workdir ,它也会在临时 docker 环境中查找 $workdir :

##[error]COPY failed: stat /var/lib/docker/tmp/docker-builder513641162/home/vsts/work/1/a/Release: no such file or directory

有没有办法在 Docker 中重用工件,而无需将其发布到 Azure Artifacts 并从 Internet 再次下载它?

这是我的工件发布和 Docker 任务,以防出现混淆:

    - publish: '$(Build.ArtifactStagingDirectory)'
      artifact: drop

    - task: Docker@2
      inputs:
        containerRegistry: 'ACR Service Connection'
        repository: 'Tailspin.SpaceGame-$(buildConfiguration)'
        command: 'build'
        Dockerfile: '**/Dockerfile'
        arguments: '--build-arg  workdir="$(Build.ArtifactStagingDirectory)/$(buildConfiguration)"'

当您的 Dockerfile 中有COPY指令时,路径是相对于构建上下文的。 您尚未在 Docker 任务输入中设置构建上下文,因此默认为** ,与您的 Dockerfile 位于同一目录。 如果您需要复制的唯一内容包含在$(Build.ArtifactStagingDirectory) ,那么我认为您应该能够将该目录设置为构建上下文。 您还需要修改 Dockerfile 以不再使用 workdir,因为它只是直接从构建上下文中包含的。

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
COPY . App/
WORKDIR /App
ENTRYPOINT ["dotnet", "Tailspin.SpaceGame.Web.dll"]
 - task: Docker@2
      inputs:
        containerRegistry: 'ACR Service Connection'
        repository: 'Tailspin.SpaceGame-$(buildConfiguration)'
        command: 'build'
        Dockerfile: '**/Dockerfile'
        buildContext: '$(Build.ArtifactStagingDirectory)/$(buildConfiguration)'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM