docker - 无法使用 Artifactory 插件将 Docker Image 推送到 Jenkins 管道中的 Artifactory
问题描述
我在 Artifactory 上使用 Docker Registry。我可以使用 docker 命令拉/推图像。现在我尝试使用 Jenkins 管道推送图像。
该图像称为registry-url/docker/image:latest
. 我在 Artifactory 上有一个名为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'
我错过了什么或做错了什么?
编辑: 基于这个问题,我回到了我最初的想法:
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 时,图像就在那里......我也可以拉图像。似乎很好,但詹金斯构建仍然失败。
Artifactory 插件:2.15.1
Artifactory 版本:5.10.3
这真的是一个很快就会修复的错误吗?
解决方案
Artifcatory 可以配置为带有或不带有反向代理的 docker 注册表。看起来您的 Artifactory 未使用反向代理(无代理配置)进行配置。您可以在此处阅读有关配置选项的更多信息。
Jenkins Artifactory 插件的 2.16.1 版增加了对无代理配置的支持。升级您的 Artifactory 插件应该可以解决您的问题。
推荐阅读
- java - 未创建 H2 数据库
- html - 移除 Flexbox 时垂直居中失败
- ef-core-2.1 - 审计从多个表到单个 EF 审计表的日志记录时出现无效的强制转换异常
- javascript - 日期以奇怪的方式显示角度 6
- java - 未能实例化一个或多个类
- node.js - gRPC 节点服务器:如何从不同的 Git 存储库加载 protobuf 文件?
- python - 一旦我使用 pd.read_excel 将包含简单数据表的 Excel 表加载到 Python 中,我就无法操作数据
- r - 是否可以将列表的默认 md_document 输出从 `## [1]` 更改为 `1.` 以用于枚举列表?
- excel-formula - 带有通配符字符串的 Excel 索引和匹配函数
- android - 在 Android 中以编程方式设置和检测单声道音频(辅助功能)