如何将 docker 镜像发布为 azure devops 中的工件

Ram*_*yan 6 azure docker azure-devops azure-pipelines

我正在我的 Azure 管道中构建 Docker 映像。现在,我想根据配置参数将此映像推送到多个 aws 帐户(dev、stage、prod)。问题是,图像在发布工件中不可用。我在研究过程中发现这篇文章。我对有关保存 docker 映像以便可以在发布工件中使用的解决方案感到困惑。我有两个具体问题:

  1. docker savedocker build 后如何在 Azure 管道任务中使用该命令。可用的docker任务没有这个命令。
  2. 除了保存图像之外,还有其他更好的方法吗?

Ale*_*lex 14

如今,编写管道的首选方式是使用 yaml。

请参阅我的代码,了解如何使用 Artifactory docker 注册表在多级管道中执行此操作。

如果我们处于 master 状态,那么 MY_ADDITIONAL_TAG 也将被推送。

trigger:
- master

resources:
- repo: self

variables:
  tag: '$(Build.BuildId)'

stages:
- stage: Build
  displayName: Build DevOps base image
  jobs:
  - job: Build_and_Push
    steps:
    - task: Docker@2
      displayName: Build
      inputs:
        containerRegistry: ''
        repository: 'MY_REPO/IMAGE'
        command: 'build'
        Dockerfile: 'PATH_TO_MY_DOCKERFILE'
        tags: $(tag)
    - task: Bash@3
      displayName: Save Docker Image
      inputs:
        targetType: 'inline'
        script: |
          docker save MY_DOCKER_REPO_IMAGE_NAME:$(tag) -o $(Pipeline.Workspace)/MY_IMAGE_FILE.tar
    - task: PublishPipelineArtifact@1
      inputs:
        targetPath: '$(Pipeline.Workspace)/MY_IMAGE_FILE.tar'
        artifact: 'MY_ARTIFACT'
        publishLocation: 'pipeline'
- stage: Push
  displayName: Push DevOps base image
  jobs:
  - job: Push
    steps:
    - task: DownloadPipelineArtifact@2
      inputs:
        buildType: 'current'
        artifactName: 'MY_ARTIFACT'
        targetPath: '$(Pipeline.Workspace)'
    - task: Bash@3
      displayName: Load Docker Image
      inputs:
        targetType: 'inline'
        script: |      
          docker load --input $(Pipeline.Workspace)/MY_IMAGE_FILE.tar
          docker tag MY_DOCKER_REPO_IMAGE_NAME:$(tag) MY_DOCKER_REPO_IMAGE_NAME:MY_ADDITIONAL_TAG
    - task: Docker@2
      displayName: push development tags
      inputs:
        containerRegistry: 'MY_DOCKER_REGISTRY'
        repository: 'MY_REPO/IMAGE'
        command: 'push'
        tags: | 
          $(tag)
    - task: Docker@2
      condition: eq(variables['Build.SourceBranch'], 'refs/heads/master')
      displayName: push 0-devops tag
      inputs:
        containerRegistry: 'MY_ARTIFACT'
        repository: 'MY_REPO/IMAGE'
        command: 'push'
        tags: | 
          MY_ADDITIONAL_TAG
Run Code Online (Sandbox Code Playgroud)


Ram*_*yan 4

经过大量研究后,我发现这篇文章解决了我的问题https://dev.to/n3wt0n/container-image-promotion-across-environments-build-artifact-5887

注意:我们可以手动添加 Azure DevOps 中可用的 Docker 任务片段中不存在的命令。文章中也提到了这一点以及执行此操作的步骤。