Azure Pipelines任务DockerCompose中的Lock服务实际上是做什么的?

时间:2020-04-05 13:50:24

标签: docker-compose azure-devops azure-pipelines

我正在学习对CI / CD使用Azure Pipelines。我阅读了official document,发现Docker Compose任务有一个名为Lock services的动作。我不知道此操作实际上是做什么的,并且锁定图像意味着什么。

任何人都可以向我解释它,或者提供一些有关何时以及如何使用它的示例?

1 个答案:

答案 0 :(得分:1)

我们已经公开了此任务的源代码,因此您可以检查此page来分析此命令的确切操作。

对于图像,有两个不同的标识:tagdigest。现在,让我们假设一种情况:

大多数情况下,Container Registry中的已标记图像是可变的,因此您或任何人都可以通过适当的权限将具有相同标签的图像更新/推送/删除到该注册表。 但是,当您将映像部署到生产环境时,无法确定带有一个特定标签的映像是否不会被覆盖,而是您要部署的映像。

目前,digest是您的最佳选择。

因为digest是根据图像计算出的 SHA256 ,并唯一地标识了。图片一旦更改,相应的SHA256 value也将更改。


此操作的说明

选中此code line(定义为here)。它的工作逻辑是读出docker-compose.yml文件中使用的图像,提取图像并为其生成摘要。接下来,将自动生成一个新的docker-compose.yml文件,该图像将在此新的docker-compose.yml文件中指定摘要。


示例

我使用的任务定义:

- task: DockerCompose@0
  displayName: 'Lock services'
  inputs:
    containerregistrytype: 'Container Registry'
    dockerRegistryEndpoint: {service connection name}
    dockerComposeFile: 'Docker/docker-compose.yml'
    action: 'Lock services'
    removeBuildOptions: true

docker-compose.yml

version: '3'
services:
  web:
    image: xxxx/testwebapp
    ports:
      - "1983:80"
  newsfeed:
    image: xxx/merlin
  redis:
    image: redis

请参阅此任务的版本log

enter image description here

生成的new docker-compose.yml的内容。

(使用cat xxx命令列出它们)

enter image description here


现在,将映像部署到生产环境时,只需使用新的docker-compose.yml文件即可自动生成任务。这样可以确保部署的映像是您一开始就构建的版本,即使以后有人覆盖此映像。