Ram*_*yan 6 azure docker azure-devops azure-pipelines
我正在我的 Azure 管道中构建 Docker 映像。现在,我想根据配置参数将此映像推送到多个 aws 帐户(dev、stage、prod)。问题是,图像在发布工件中不可用。我在研究过程中发现了这篇文章。我对有关保存 docker 映像以便可以在发布工件中使用的解决方案感到困惑。我有两个具体问题:
docker savedocker build 后如何在 Azure 管道任务中使用该命令。可用的docker任务没有这个命令。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)
经过大量研究后,我发现这篇文章解决了我的问题https://dev.to/n3wt0n/container-image-promotion-across-environments-build-artifact-5887
注意:我们可以手动添加 Azure DevOps 中可用的 Docker 任务片段中不存在的命令。文章中也提到了这一点以及执行此操作的步骤。
| 归档时间: |
|
| 查看次数: |
19613 次 |
| 最近记录: |