如何在Azure DevOps中将Docker镜像发布为构件

6
我正在Azure管道中构建一个Docker镜像。现在,根据配置参数,我想将此镜像推送到多个aws账户(dev、stage、prod)。问题是,该镜像在发布工件中不可用。在我的研究中,我遇到了这篇文章这篇文章。我对于保存Docker镜像以便在发布工件中使用的解决方案感到困惑。我有两个具体的问题:
  1. 在docker build之后,我将如何在Azure管道任务中使用docker save命令。可用的docker任务没有这个命令。
  2. 除了保存镜像之外,是否有更好的方法来完成这项任务。

1
嗨,只是想确认一下这个问题是否仍在阻碍你?有关于这个问题的任何更新吗? - Vito Liu
我发现了这篇文章https://dev.to/n3wt0n/container-image-promotion-across-environments-build-artifact-5887,我的问题得到了解决。 - Raman Balyan
1
嗨,@RamanBalyan,感谢您的分享,您介意将评论转换为答案吗?这样就可以帮助其他遇到相同问题的社区成员,并且我们可以保存这个线程。谢谢。祝您愉快。 :) - Vito Liu
3个回答

11

现在编写流水线的首选方式是使用yaml。

请查看我的代码,了解如何在Artifactory docker registry中进行多阶段流水线。

如果我们在主分支,则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

4

4
在 Azure Pipeline 任务中,如何使用 docker build 后的 docker save 命令?现有的 docker 任务没有此命令。
这与任务版本相关。
步骤:添加 Docker 任务->切换任务版本至0 ->选择选项 运行Docker命令,然后可以运行 docker save 命令。具体见下图。

enter image description here

是否有比保存镜像更好的方法?
我们建议将 Docker 镜像作为工件上传。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接