首页 > 解决方案 > 使用 Azure 管道更新 JFrog Docker Registry 中的最新工件

问题描述

我正在将我的图像推送到带有标签的 JFrog artifactory Docker Registry:最新的 Azure 任务

- task: ArtifactoryDocker@1
  displayName: 'Publish a docker image'      
  inputs:
    command: 'push'
    artifactoryService: 'Artifactory'
    targetRepo: 'docker'
    imageName: '$(imageName):latest'

但是它不会重写现有的最新版本,并且在管道中我会看到下一个日志

    394668d88274: Layer already exists
d821d3ad1366: Layer already exists
78d869964af5: Layer already exists
26f565299233: Layer already exists
c952f96d3d90: Layer already exists
29a09581f308: Layer already exists
30ffbe29feab: Layer already exists
af63a7c31ba7: Layer already exists
6153c9b0b282: Layer already exists
25c2968702ec: Layer already exists
610209d4392e: Layer already exists
7cd35e62d6fb: Layer already exists
2de391e51d73: Layer already exists
92d30847d049: Layer already exists
d73dd9e65295: Layer already exists
686245e78935: Layer already exists
d7ff1dc646ba: Layer already exists
644879075e24: Layer already exists
latest: digest: sha256:586235b20caabc398b8da81d79a48e27385456d4a4bc2a343f7cacdd8ce97b38 size: 4078

我可以以某种方式使其覆盖吗?我找不到任何有关此插件任务的文档。

标签: dockerazure-pipelinesartifactory

解决方案


找不到此插件任务的任何文档。

恐怕这个插件对于 azure devops 不存在。

根据我的理解,应该覆盖以前的图像。您可以检查您的图像latest在上述管道执行完成后是哪个标签。我认为图像的修改时间应该随着管道的运行而改变。

Layer already exists

这应该是因为您的 dockerfile 在那里没有更改。如您所知,Dockerfile 的每条指令都会生成一个层。如果指令没有改变,相应的层也不会改变。

另外,如果您担心图片不是您要推送的最新图片。您可以考虑在推送之前删除该标签。

查看此Frog 文档,并考虑使用命令行任务来执行此 api:

curl -k -u {username}:{password} -X DELETE https://{reverseproxyhost}/artifactory/<repo>/<imgname>/<imgtag>

推荐阅读