2

我正在尝试使用 Jenkins docker 插件在我的 Jenkins 管道中推广 docker 映像,但我能够这样做,因为我遇到了以下错误。

"docker tag" requires exactly 2 arguments.
See 'docker tag --help'.

Usage:  docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE

我可以在日志中看到以下内容

docker tag artifactory.mycompany.com/docker-dev/appname/dev:latest artifactory.mycompany.com/docker-dev/appname/dev:artifactory.mycompany.com/docker-dev/appname/dev:latest artifactory.mycompany.com/docker-dev/appname/test:latest

管道代码:

testImage = docker.image("artifactory.mycompany.com/docker-dev/appname/dev:latest")

testImage.pull()

testImage.push("artifactory.mycompany.com/docker-dev/appname/dev:latest artifactory.mycompany.com/docker-dev/appname/test:latest" )

知道这里有什么问题...

编辑#1:如果我遵循我会得到不同的错误。

testImage = docker.image("artifactory.mycompany.com/docker-dev/appname/dev:latest")

testImage.pull()

testImage.tag("artifactory.mycompany.com/docker-dev/appname/test:latest")

testImage.push( )

错误:

Error parsing reference: "artifactory.mycompany.com/docker-dev/appnamee/dev:artifactory.mycompany.com/docker-dev/appname/test:latest" is not a valid repository/tag: invalid reference format
4

1 回答 1

1

您似乎对每个 docker 命令的作用以及如何向工作区中的现有 docker 添加新标签感到困惑。

在 Jenkins 世界中,docker 命令的行为是这样的

docker.image接受一个参数,组成IMAGE_NAMETAG

docker.tag使用单个参数,将假设TAG(此命令不会更改“IMAGE_NAME”,它只会更改TAG部分)

docker.push采用单个可选参数 ,TAG意味着仅推送具有不同标签的现有图像(而不是具有不同的IMAGE_NAME

在您的管道上,您正在尝试更改IMAGE_NAMEdocker 标识符的一部分,因为上述命令都没有帮助您。

新解决方案

解决此问题的另一种方法是IMAGE_NAME通过 shell 进行更改,然后使用 Jenkins 插件映射和推送图像

sh("docker tag ORIGINAL_IMAGE_NAME:ORIGINAL_TAG NEW_IMAGE_NAME:NEW_TAG")
newImage = docker.image("NEW_IMAGE_NAME:NEW_TAG")
# docker plugin should find the image on the localhost, so there is no need to pull it form the registry
newImage.push

在您的代码上,例如

sh ('docker tag artifactory.mycompany.com/docker-dev/appname/dev:latest artifactory.mycompany.com/docker-dev/appname/test:latest')
testImage2 = docker.image('artifactory.mycompany.com/docker-dev/appname/test:latest')

然后,将每个图像独立于另一个推入

testImage.push()
testImage2.push()

不工作

您可以尝试提供 2 个参数docker.tag,例如

docker.tag (ORIGINAL_IMAGE_NAME:ORIGINAL_TAG, NEW_IMAGE_NAME:NEW_TAG)

在你的情况下,像

testImage.tag ("artifactory.mycompany.com/docker-dev/appname/dev:latest" "artifactory.mycompany.com/docker-dev/appname/test:latest")

然后,将每个图像独立于另一个推入

testImage.push (ORIGINAL_IMAGE_NAME:ORIGINAL_TAG)
testImage.push (NEW_IMAGE_NAME:NEW_TAG)
于 2020-03-02T14:38:48.807 回答