docker - 无法使用 Artifactory 插件将 Docker 镜像推送到 Jenkins 管道中的 Artifactory

标签 docker jenkins jenkins-pipeline artifactory docker-registry

我正在 Artifactory 上使用 Docker 注册表。我可以使用 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
                }
            }
        }
...

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

我在 Jenkins 上使用了一个相当新版本的 Docker:

Docker version 18.01.0-ce, build 03596f51b1

到目前为止一切顺利。但是当我运行管道时,我在 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)
  ...

在 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'

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

编辑: 基于此issue我回到了最初的想法:

def buildInfo = rtDocker.push('registry-url/docker/image:latest', 'docker') 

我再次尝试构建。错误:

Could not find manifest.json in Artifactory in the following path: https://registry-url/artifactory/docker/docker/image/latest/manifest.json

路径中出现两次“docker”,但似乎不起作用。但是当我检查 Artifactory 时,图像就在那里......我也可以拉取图像。看起来不错,但 Jenkins 构建仍然失败。

Artifactory 插件:2.15.1
Artifactory版本:5.10.3

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

最佳答案

Artifcatory 可以配置为带有或不带有反向代理的 Docker 注册表。 您的 Artifactory 似乎未使用反向代理(无代理配置)进行配置。您可以阅读有关配置选项的更多信息 here .

Jenkins Artifactory 插件版本 2.16.1 添加了对无代理配置的支持。升级您的 Artifactory 插件应该可以解决您的问题。

关于docker - 无法使用 Artifactory 插件将 Docker 镜像推送到 Jenkins 管道中的 Artifactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50022357/

相关文章:

amazon-web-services - 如何指示 AWS ELB 将返回 403 代码的健康检查视为成功?

jenkins - Jenkins 有办法停止或减少重复的工作吗?

jenkins - 如何在 jenkins 管道中导入文件夹级共享库

jenkins - 列出脚本化的Jenkins Pipeline中正在使用的插件

mongodb - 如何设置多个 PRISMA 服务,一个用于测试,一个用于开发

udp - 将 Docker 容器连接到网络接口(interface)/设备而不是 IP 地址

linux - Jenkins 在重启电脑时丢失所有数据

docker - 释放内部空间后调整Docker容器的大小

docker - 如何获得Kubernetes yaml中所有图像的解析sha摘要?

jenkins-pipeline - 如何访问标签中轴的值?