使用 Azure 管道更新 JFrog Docker Registry 中的最新工件

Update latest artifact in JFrog Docker Registry with Azure pipeline

我正在将我的图像推送到 JFrog artifactory Docker Registry with tag : latest with Azure task

- 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

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

Cannot find any documantation for this task of plugin.

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

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

Layer already exists

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

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

检查此 Frog document,并考虑使用命令行任务来执行此 api:

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