Docker compose 在多阶段Azure Devops中访问Docker映像
我正在构建一个Azure DevOps管道,并正在尝试多阶段功能,这是通过使用yml文件定义的 在yml定义中,我有两个阶段,一个是使用docker compose命令构建docker图像,第二个阶段是将这些图像推送到ACR。这似乎是不可能的,因为我还没有从第一阶段成功访问最近构建的图像。 这是一个示例yml文件Docker compose 在多阶段Azure Devops中访问Docker映像,docker-compose,azure-devops,Docker Compose,Azure Devops,我正在构建一个Azure DevOps管道,并正在尝试多阶段功能,这是通过使用yml文件定义的 在yml定义中,我有两个阶段,一个是使用docker compose命令构建docker图像,第二个阶段是将这些图像推送到ACR。这似乎是不可能的,因为我还没有从第一阶段成功访问最近构建的图像。 这是一个示例yml文件 stages: - stage: Build displayName: Build image jobs: - job: Build displayName:
stages:
- stage: Build
displayName: Build image
jobs:
- job: Build
displayName: Build
pool:
vmImage: 'ubuntu-latest'
steps:
- publish: $(Build.ArtifactStagingDirectory)
artifact: docker-images
- task: DockerCompose@0
inputs:
containerregistrytype: 'Azure Container Registry'
azureSubscription: '************'
azureContainerRegistry: '************'
dockerComposeFile: '**/docker-compose.yml'
action: 'Build services'
additionalImageTags: '$(Build.BuildId)'
- stage: Push
displayName: Push image
jobs:
- job: Push
displayName: Push
pool:
vmImage: 'ubuntu-latest'
steps:
- download: current
artifact: docker-images
- task: DockerCompose@0
inputs:
containerregistrytype: 'Azure Container Registry'
azureSubscription: '************'
azureContainerRegistry: '************'
dockerComposeFile: '**/docker-compose.yml'
action: 'Push services'
additionalImageTags: '$(Build.BuildId)'
问题是,我如何访问在上一阶段构建的docker图像?它存放在哪里?我尝试从第一个阶段下载$(Build.ArtifactStagingDirectory)
,但它似乎没有。如果我有一个阶段但有单独的工作,同样适用。
如果我想在一个阶段中同时使用build和push,它可以正常工作,但我希望每个阶段都有一个单独的阶段。您正在指定
pool:
vmImage: 'ubuntu-latest'
这意味着每个阶段都从Microsoft托管的管道池中提取一个新的空白VM映像,并在其上运行命令。您的构建不会持久
所以简单的回答是“你不能”。如果希望状态在作业之间保持不变,则需要创建专用的私有代理 首先,您应该始终将发布工件任务放在阶段的末尾。或者只发布一个空文件夹 其次,dock compose命令生成图像并将其保存在托管计算机上的docker文件夹中。不会向代理的artifacts文件夹
$(Build.artifactstagindirectory)
输出任何内容
作为在阶段之间传递docker映像的解决方法,您可以使用docker image save
命令将映像专门保存在文件夹$(Build.artifactStaginDirectory)
中。并使用发布工件任务将映像发布到azure devops服务器。然后,您可以在下一阶段使用下载工件来下载图像
您可以查看以下示例:
1、在构建阶段添加一个Docker@0(版本0.*)在DockerCompose任务之后运行图像保存命令,将图像保存到文件夹$(Build.ArtifactStagingDirectory)
3,现在您可以从构建阶段下载映像存档文件到发布阶段。您可以运行命令来加载存档映像。加载后,您可以将其推送到ACR
- download: current
artifact: docker-images
- task: Docker@0
displayName: 'Run a Docker command'
inputs:
containerregistrytype: 'Azure Container Registry'
azureSubscription: '************'
azureContainerRegistry: '************'
action: 'Run a Docker command'
customCommand: 'load --input $(Pipeline.Workspace)/docker-images/imagetest.tar'
希望以上帮助
- publish: $(Build.ArtifactStagingDirectory)
artifact: docker-images
- download: current
artifact: docker-images
- task: Docker@0
displayName: 'Run a Docker command'
inputs:
containerregistrytype: 'Azure Container Registry'
azureSubscription: '************'
azureContainerRegistry: '************'
action: 'Run a Docker command'
customCommand: 'load --input $(Pipeline.Workspace)/docker-images/imagetest.tar'