[英]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.