jenkinsfile docker.withRegistry 使用子域方法推送到 artifactory

jenkinsfile docker.withRegistry push to artifactory with the subdomain method

我已经使用 repository path method 配置了我们的工件实例。我正在尝试将 Jenkins 中构建的图像推送到 Artifactory,但它似乎忽略了存储库路径本身。

def dockerImage = _dockerImage("kl_alpha")
docker.withRegistry( "https://artifactory-dev.foobar.com/docker-local", "someCreds") {
  // def dockerImage =  docker.build("kl_alpha:$BUILD_NUMBER", "./")
  dockerImage.push()
  dockerImage.push("latest")
} 

             

Jenkins 中的输出看起来像这样

+ docker push artifactory-dev.foobar.com/kl_alpha:25
The push refers to repository [artifactory-dev.foobar.com/kl_alpha]

如您所见,它忽略了地址的 docker-local 部分。有什么想法吗?

对于 Docker 和 Jenkins Pipeline 的 Docker 插件,存储库是图像参数的一部分,而不是注册表。一般来说,这看起来像:

docker.withRegistry('<registry url>') {}
  def dockerImage = docker.build('<repository>/<image name>:<tag>')
}

请注意,Jenkins Pipeline 的 Artifactory Docker 注册表文档有时会使用术语“存储库”,而实际上它的意思是“注册表”,这可能会造成混淆和误导。另请注意,某些图像没有参数的存储库部分,因为它们是官方的。

在您的情况下,代码将显示为:

docker.withRegistry('https://artifactory-dev.foobar.com', 'someCreds') {
  def dockerImage = docker.build("docker-local/kl_alpha:${BUILD_NUMBER}", './')
  dockerImage.push()
  dockerImage.push('latest')
}