Azure Devops构建的镜像未在其创建的管道中列出

67次阅读
没有评论

问题描述

使用Azure DevOps从Azure DevOps构建和推送Docker镜像到Azure容器注册表。使用下面的azure-pipelines.yml文件,这个过程非常顺利,但是在创建的镜像和创建它的管道之间似乎没有建立任何关系。在执行的管道中没有列出任何工件。
Azure Devops构建的镜像未在其创建的管道中列出
工件是正确创建的,我可以在运行发布管道时使用它。如果我在本地检查镜像,可以确认它具有由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。

正文完