问题描述
使用Azure DevOps从Azure DevOps构建和推送Docker镜像到Azure容器注册表。使用下面的azure-pipelines.yml
文件,这个过程非常顺利,但是在创建的镜像和创建它的管道之间似乎没有建立任何关系。在执行的管道中没有列出任何工件。
工件是正确创建的,我可以在运行发布管道时使用它。如果我在本地检查镜像,可以确认它具有由Docker任务创建的标签。
# Docker
# Build and push an image to Azure Container Registry
# https://docs.microsoft.com/azure/devops/pipelines/languages/docker
trigger:
- none
resources:
- repo: self
variables:
# Container registry service connection established during pipeline creation
dockerRegistryServiceConnection: '<my connection>'
imageRepository: '<my repo>'
containerRegistry: '<my registry>'
dockerfilePath: '$(Build.SourcesDirectory)/Dockerfile'
tag: '$(Build.BuildNumber)'
DOCKER_BUILDKIT: 1
# Agent VM image name
vmImageName: 'ubuntu-latest'
stages:
- stage: Build
displayName: Build and push stage
jobs:
- job: Build
displayName: Build
pool:
vmImage: $(vmImageName)
steps:
- task: Docker@2
displayName: Build
inputs:
command: build
repository: $(imageRepository)
dockerfile: $(dockerfilePath)
arguments: '--target prod'
containerRegistry: $(dockerRegistryServiceConnection)
tags: |
latest
$(tag)
- task: Docker@2
displayName: Push
inputs:
command: push
repository: $(imageRepository)
dockerfile: $(dockerfilePath)
containerRegistry: $(dockerRegistryServiceConnection)
tags: |
latest
$(tag)
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
你在Azure DevOps中构建和推送Docker镜像时,不会自动在创建的管道中列出工件。工件是通过PublishBuildArtifacts@1
任务发布的,而你是将镜像发布到Docker容器注册表(而不是Azure构建工件)。
但是,你可以通过Docker CLI找到其他项目(如标签和新镜像)。
方案2
如果你希望在Azure DevOps的管道中列出工件,可以使用PublishBuildArtifacts@1
任务将镜像发布为工件。这样,你就可以在执行的管道中看到工件。
以下是如何修改你的azure-pipelines.yml
文件以发布镜像作为工件的步骤:
1. 在jobs
下的steps
中添加一个新的任务:
- task: PublishBuildArtifacts@1
displayName: Publish Artifacts
inputs:
PathtoPublish: '$(Build.SourcesDirectory)/path/to/artifacts'
ArtifactName: 'MyDockerImage'
在上面的示例中,我们添加了一个名为Publish Artifacts
的任务。它将指定要发布的路径和工件的名称。你需要将PathtoPublish
替换为你的镜像路径,并将ArtifactName
替换为你想要的工件名称。
2. 保存并提交你的azure-pipelines.yml
文件。
3. 执行管道后,你将在执行的管道中看到工件列表。
请注意,这种方法将在Azure DevOps的管道中列出工件,但不会在Docker容器注册表中列出工件。如果你需要在Docker容器注册表中查找标签和新镜像,你仍然需要使用Docker CLI。
方案3
如果你只是想在Azure DevOps的管道中查看标签和新镜像,而不需要将它们作为工件列出,你可以使用Docker CLI来查找它们。
以下是如何使用Docker CLI查找标签和新镜像的步骤:
1. 打开命令行界面,并登录到你的Docker容器注册表。
docker login <your-registry-url> -u <username> -p <password>
将<your-registry-url>
替换为你的Docker容器注册表的URL,<username>
和<password>
替换为你的登录凭据。
2. 使用以下命令列出标签:
docker image ls <your-registry-url>/<image-repository>
将<your-registry-url>
替换为你的Docker容器注册表的URL,<image-repository>
替换为你的镜像仓库。
3. 使用以下命令查找新镜像:
docker image history <your-registry-url>/<image-repository>:<tag>
将<your-registry-url>
替换为你的Docker容器注册表的URL,<image-repository>
替换为你的镜像仓库,<tag>
替换为你的镜像标签。
请注意,这种方法只适用于查找标签和新镜像,并不会在Azure DevOps的管道中列出工件。如果你需要在Azure DevOps的管道中列出工件,请参考方案2。