我在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
}
}
}
...
当我使用不同的路径时,我面临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
路径中两次“码头工人”似乎无法工作。但是当我检查Artifactory时,图像就在那里......我也可以拉动图像。它看起来很好,但jenkins构建仍然失败。
Artifactory插件:2.15.1
Artifactory Version:5.10.3
这真的是一个很快就会修复的错误吗?
答案 0 :(得分:6)
可以将Artifcatory配置为具有或不具有反向代理的docker注册表。 看起来您的Artifactory未使用反向代理(无代理配置)进行配置。您可以阅读有关配置选项here的更多信息。
Jenkins Artifactory插件的2.16.1版增加了对无代理配置的支持。升级Artifactory插件可以解决您的问题。
答案 1 :(得分:2)
尝试按照此示例操作。在这里,我们有Jenkins管道来向/从Artifactory推送/推送泊坞窗图像:https://github.com/jfrogtraining/kubernetes_example/blob/master/docker-app/Jenkinsfile#L43