【问题标题】:Jenkins pipeline docker.push() gives error "docker tag" requires exactly 2 argumentsJenkins 管道 docker.push() 给出错误“docker tag”需要 2 个参数
【发布时间】:2020-09-07 21:11:45
【问题描述】:

我正在尝试将构建的 docker 映像推送到私有注册表但遇到此错误:

Successfully built 6059208ca310
**Successfully tagged ubuntu:18.04**
[Pipeline] echo
Image Build
[Pipeline] isUnix
[Pipeline] sh
+ docker tag ubuntu:18.04 --build-arg PROXY_ADDRESS=http://proxy-random.net:3100 --build-arg my_image=ubuntu:18.04 x.some.com/ubuntu:18.04 --build-arg PROXY_ADDRESS=http://proxy-random.net:3100 --build-arg my_image=atpdml_pet_docker/ubuntu:ubuntu:18.04
"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
[Pipeline] }
[Pipeline] // withDockerRegistry
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // dir
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline

虽然我没有在我的 pipeline.groovy 中的任何地方调用 docker 标签,但我想它是 push() 的一部分。我的 docker.build() 使用 --build-arg 并要求将标记的图像(在本例中使用名称 ubuntu:18.04 或标记 id 6059208ca310)推送到注册表。

def build_and_upload_image(dockerFileDir, imageName, imageTag) {
	script {
		dir(dockerFileDir) {
			docker.withRegistry('https://some.com','key') {
				def image = docker.build("${imageName}:${imageTag} --build-arg PROXY_ADDRESS=http://proxy-random.net:3100 --build-arg my_image=ubuntu:18.04")
				echo 'Image Build'
				image.push("ubuntu:18.04") ### even tried image.push() 
            	image.push("latest")   
            	echo 'image pushed'
			}
		}
	}
}

pipeline {
	agent{
		label 'docker-build'
	}
	stages {
		stage('Build format checker docker') {
			steps {
				build_and_upload_image("docker","ubuntu","18.04")
			}
		}
	}
}

【问题讨论】:

    标签: docker jenkins


    【解决方案1】:

    你需要改变

    def image = docker.build("${imageName}:${imageTag} --build-arg PROXY_ADDRESS=http://proxy-random.net:3100 --build-arg my_image=ubuntu:18.04")
    

    def image = docker.build("${imageName}:${imageTag}", "--build-arg PROXY_ADDRESS=http://proxy-random.net:3100 --build-arg my_image=ubuntu:18.04 .")
    

    参考资料:

    1. Jenkins Pipeline docker.build() gives error '"docker build" requires exactly 1 argument(s)'

    【讨论】:

    • 我尝试过这种方式,但它会抛出相同的 docker tag 错误:+ docker tag ubuntu:18.04 some.com/ubuntu:ubuntu:18.04 解析参考错误:“some.com/ubuntu:ubuntu: 18.04" 不是有效的存储库/标签:无效的参考格式....我的问题是它从哪里获取标签信息(我想来自构建),我可以在没有它的情况下使用默认标签信息修改和推送它构建步骤。例如,通过在 push() 中指定标签 ID 或标签名称。谢谢
    【解决方案2】:

    所以第一步是更改@Tarun Lalwani 提到的语法。之后这是一个标签问题(不是有效的存储库/标签:无效的参考格式),我可以通过在 push() 中提到 {env.BUILD_NUMBER} 来解决这个问题(https://stackoverflow.com/a/53858257/7513466) , 虽然它没有使用所需的标签名称,但它可以通过标签 ID 将图像推送到存储库。

    【讨论】:

      猜你喜欢
      • 2018-02-10
      • 2017-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多