我想使用 Azure Pipeline 在我的存储库中构建 .net 服务的 dockerfile。文件夹结构如下:
|-- ProjectA
|-- |-- RepoB
| | -- .gitignore
| | -- Example.sln
| | -- Readme.md
| | -- Services
| | -- ServiceC
| | -- ServiceC.API
| | -- Program.cs
| | -- .
| | -- .
| | -- Dockerfile
| | -- ServiceD
| | -- ServiceD.API
| | -- Program.cs
| | -- .
| | -- .
| | -- Dockerfile
当我尝试使用 Azure 管道构建上述 dockerfiles 时,出现以下错误::
[error]Unhandled: No Dockerfile matching /home/vsts/work/1/s/Dockerfile was found.
azure-pipelines.yml内容如下:
# Docker
# Build a Docker image
# https://docs.microsoft.com/azure/devops/pipelines/languages/docker
trigger:
- test
resources:
- repo: self
variables:
tag: '$(Build.BuildId)'
stages:
- stage: Build
displayName: Build image
jobs:
- job: Build
displayName: Build
pool:
vmImage: ubuntu-latest
steps:
- task: Docker@2
displayName: Build an image for Lesson Service
inputs:
command: build
buildContext: 'Services/ServiceC/ServiceC.API/**'
dockerfile: 'Dockerfile'
tags: |
$(tag)
你能帮我解决这个错误吗?感谢您的帮助。
可以运行Yaml文件并找到Dockerfile
好的,简单的,
所以你有两个参数
buildContext: 'Services/ServiceC/ServiceC.API/**'
dockerfile: 'Dockerfile'
构建上下文是构建的基础,dockerfile 是 docker 文件的位置。
当您的管道执行该任务时,您将从 /home/vsts/work/1/s/ 执行,因此如果您删除整个存储库,您的 docker 文件路径将如下所示。
项目A/RepoB/服务/ServiceC/ServiceC.API/Dockerfile
我不会在构建上下文中使用通配符,我总是在解决方案级别设置构建上下文,但这一切都取决于 dockerfile 的构建方式。
- task: Docker@2
displayName: Build an image for ServiceC
inputs:
command: build
buildContext: 'ProjectA/RepoB/Services/Services/ServiceC'
dockerfile: 'ProjectA/RepoB/Services/ServiceC/ServiceC.API/Dockerfile'
然后您将为下一个 dockerfile 执行第二个任务
- task: Docker@2
displayName: Build an image for ServiceD
inputs:
command: build
buildContext: 'ProjectA/RepoB/Services/Services/ServiceD'
dockerfile: 'ProjectA/RepoB/Services/ServiceD/ServiceD.API/Dockerfile'