问题
我在 Azure 上有一个 Docker 容器注册表,其中一个容器包含多个标记版本。我想删除未使用的标签,因为它们占用了大量空间并且可以随时重新制作。
原因
此 Docker 容器注册表存在的唯一原因是 VSTS 如何处理 Docker 容器的构建和发布。运行 VSTS 构建时,它会使用新标签将容器存储在 Azure 上的注册表中。并非所有版本都会发布,因此可以安全地删除这些标签。
VSTS 非常干净地管理构建,如果 30 天后不使用它们(默认情况下),则会将其删除;不过,一旦推送到 Docker 容器注册表,即使没有匹配的 VSTS 构建,它们也会无限期地保留在那里。
问题
如何创建一个任务来从注册表中删除不再与 VSTS 中的构建关联的 Docker 容器?
注意:容器标签与 VSTS 的 buildId
匹配
最佳答案
由于没有 VSTS 任务来完成此任务,因此您需要执行几个步骤来生成一些 JSON 数据文件,然后处理该数据并通过 Azure CLI 运行一些 cmd 命令。
构建
您需要从 VSTS 获取构建定义 ID。该链接看起来像这样:
https://example.visualstudio.com/CP/Example%20Team/_build/index?context=mine&path=%5C&definitionId=11&_a=completed
在本例中,定义 ID 为 11
:definitionId=11
。
获得定义 ID 后,使用此 URL 查询 API 并获取仅事件构建的列表。此链接不包括已删除的版本:
https://companionprotect.visualstudio.com/CP/_apis/build/builds?deletedFilter=exclude&definitions=BUILD_DEFINITION_ID
标签
az login
az acr login --name {REGISTRY_NAME}
az acr repository show-tags --repository {CONTAINER_NAME} --output json > tags.json
删除未使用的 Docker 容器标签
处理数据后,您可以创建运行以下命令的批处理文件:
az acr repository delete --yes --repository companionconnectclient_web --tag {TAG_NAME}
如果您想在 cmd
文件中运行多个命令,请在每个命令之间放置 & ^
以便在每个命令完成后继续执行,否则只会执行第一个命令一。您也可以在换行符末尾使用 & ^
。
关于azure - 是否有 VSTS 构建任务可以从注册表中删除未使用的 Docker 容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48773679/