我正在学习对CI / CD使用Azure Pipelines
。我阅读了official document,发现Docker Compose
任务有一个名为Lock services
的动作。我不知道此操作实际上是做什么的,并且锁定图像意味着什么。
任何人都可以向我解释它,或者提供一些有关何时以及如何使用它的示例?
答案 0 :(得分:1)
我们已经公开了此任务的源代码,因此您可以检查此page来分析此命令的确切操作。
对于图像,有两个不同的标识:tag
和digest
。现在,让我们假设一种情况:
大多数情况下,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
:
生成的new docker-compose.yml
的内容。
(使用cat xxx
命令列出它们):
现在,将映像部署到生产环境时,只需使用新的docker-compose.yml
文件即可自动生成任务。这样可以确保部署的映像是您一开始就构建的版本,即使以后有人覆盖此映像。