无法使用Artifactory插件将Docker Image推送到Jenkins管道中的Artifactory

lvt*_*llo 2 artifactory jenkins docker docker-registry jenkins-pipeline

我在Artifactory上使用Docker Registry.我可以使用docker命令拉/推图像.现在我尝试使用Jenkins pipline推送图像.

图像被调用registry-url/docker/image:latest.我在Artifactory上有一个docker存储库,它被调用docker.(我能够使用docker命令拉动并推送到这个仓库).

这个阶段描述了我的Artifactory配置:

...
        stage('Deploy Docker image'){
            steps {
                script {
                    def server = Artifactory.server 'xxx'
                    def rtDocker = Artifactory.docker server: server
                    def buildInfo = rtDocker.push('registry-url/image:latest', 'docker')
                    //also tried:
                    //def buildInfo = rtDocker.push('registry-url/docker/image:latest', 'docker') 
                    //the above results in registry/docker/docker/image..
                    server.publishBuildInfo buildInfo
                }
            }
        }
...
Run Code Online (Sandbox Code Playgroud)

当我使用不同的路径时,我面临的manifest.json错误可能是正常的.我可以手动下载manifest.json : https://registry-url/artifactory/docker/image/latest/manifest.json.

我在Jenkins上使用了一个非常新版本的Docker:

Docker version 18.01.0-ce, build 03596f51b1
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.但是当我运行管道时,我在Jenkins中收到以下错误(需要50秒):

Pushing image: registry-url/image:latest
...
com.github.dockerjava.api.exception.DockerClientException: Could not push image: unknown: Not Found
    at com.github.dockerjava.core.command.PushImageResultCallback.awaitSuccess(PushImageResultCallback.java:49)
    at org.jfrog.hudson.pipeline.docker.utils.DockerUtils.pushImage(DockerUtils.java:60)
    at org.jfrog.hudson.pipeline.docker.utils.DockerAgentUtils$3.call(DockerAgentUtils.java:213)
    at org.jfrog.hudson.pipeline.docker.utils.DockerAgentUtils$3.call(DockerAgentUtils.java:205)
    at hudson.remoting.UserRequest.perform(UserRequest.java:153)
    at hudson.remoting.UserRequest.perform(UserRequest.java:50)
  ...
Run Code Online (Sandbox Code Playgroud)

在Artifactory日志中,我看到:

2018-04-25 14:24:26,663 [http-nio-8081-exec-xx] [ERROR] (o.a.a.d.r.DockerResource:153) - Unsupported docker v2 repository request for 'image'
2018-04-25 14:24:46,684 [http-nio-8081-exec-xx] [ERROR] (o.a.a.d.r.DockerResource:153) - Unsupported docker v2 repository request for 'image'
2018-04-25 14:24:46,689 [http-nio-8081-exec-xx] [ERROR] (o.a.a.d.r.DockerResource:153) - Unsupported docker v2 repository request for 'image'
2018-04-25 14:24:46,702 [http-nio-8081-exec-xx] [ERROR] (o.a.a.d.r.DockerResource:153) - Unsupported docker v2 repository request for 'image'
Run Code Online (Sandbox Code Playgroud)

我错过了什么或做错了什么?

编辑: 根据这个问题,我回到了我最初的想法:

def buildInfo = rtDocker.push('registry-url/docker/image:latest', 'docker') 
Run Code Online (Sandbox Code Playgroud)

我再次尝试了构建.错误:

Could not find manifest.json in Artifactory in the following path: https://registry-url/artifactory/docker/docker/image/latest/manifest.json
Run Code Online (Sandbox Code Playgroud)

两次'码头'在路径上似乎没有工作.但是当我检查Artifactory时,图像就在那里......我也可以拉动图像.它看起来很好,但jenkins构建仍然失败.

Artifactory Plugin:2.15.1
Artifactory Version:5.10.3

这真的是一个很快就会修复的错误吗?

Bar*_*ity 6

可以将Artifcatory配置为docker注册表,可以使用或不使用反向代理.看起来您的Artifactory未使用反向代理(无代理配置)进行配置.您可以在此处阅读有关配置选项的更多信息.

Jenkins Artifactory插件的2.16.1版增加了对无代理配置的支持.升级Artifactory插件可以解决您的问题.