更新Jenkins Artifactory插件后推送Docker镜像至JFrog仓库失败求助
问题定位与参数配置指南
官方文档第3步指令的实际含义
rtDocker.push是Artifactory Jenkins插件提供的Pipeline专用指令,核心作用是将本地Docker镜像推送至Artifactory制品库,同时自动关联采集到的构建信息。
两个必填参数的官方定义为:
- 第一个参数:完整的Docker镜像引用(即镜像打标后的完整路径,格式为
注册中心地址/仓库路径/镜像名:标签) - 第二个参数:目标Docker制品库的唯一标识(即Artifactory后台创建仓库时设置的key,插件会用这个值拉取对应仓库的配置完成推送校验)
你参考的代码片段里的拼接逻辑为:[基础Registry地址]/[实际镜像名:标签] = 完整镜像引用,其中<artifactoryDockerRegistry>占位符仅代表基础Registry地址段,不包含镜像名、标签内容。
报错核心原因
你目前的参数配置存在两处错误,直接触发了新版本插件的校验逻辑:
- 把
artifactoryDockerRegistry的值填成了带完整镜像名、标签的xxx.com/docker-local/xyz:latest,按照代码拼接逻辑,最终生成的第一个参数会变成xxx.com/docker-local/xyz:latest/hello-world:latest,完全不符合Docker镜像路径规范 - 没有把模板里的示例镜像名
hello-world:latest替换成你实际要推送的xyz:latest
新版本插件会对推送参数做强校验,从镜像路径中解析出的仓库标识和第二个参数传入的docker-local不匹配时,会主动调用后台接口拉取目标仓库配置,错误的参数格式直接导致接口返回400 Bad Request。旧版本插件校验较松,参数不规范也能正常推送,这也是你之前流程正常、更新插件后才报错的原因。
正确配置通用示例
以下示例对应你的场景:本地镜像为xyz:latest,Artifactory域名为xxx.com,目标仓库key为docker-local
直接传完整参数的写法
// 前置:初始化已在Jenkins中配置好的Artifactory实例 def artifactoryServer = Artifactory.server '你的Jenkins Artifactory实例ID' def rtDocker = Artifactory.docker server: artifactoryServer // 给本地镜像打符合推送要求的标签 sh 'docker tag xyz:latest xxx.com/docker-local/xyz:latest' // 正确的推送指令 def buildInfo = rtDocker.push 'xxx.com/docker-local/xyz:latest', 'docker-local'
按官方模板拆分变量的写法
// artifactoryDockerRegistry 仅填写基础地址段,不带镜像名、标签 artifactoryDockerRegistry = "xxx.com/docker-local" targetRepo = "docker-local" // 拼接实际的镜像名和标签作为第一个参数 def buildInfo = rtDocker.push "${artifactoryDockerRegistry}/xyz:latest", targetRepo
内容的提问来源于stack exchange,提问作者genius_monkey
相关产品推荐
相关产品推荐

