Jenkins中使用JFrog插件推送Docker镜像至Artifactory的疑问
Jenkins JFrog插件rtDockerPush参数解析与重打标签疑问解答
参数理解纠正
你之前对targetRepo的理解有误,正确的参数定义是:
- image:本地构建完成的Docker镜像标签(例如
my-image:SOME_GIT_COMMIT) - targetRepo:Artifactory中目标Docker仓库的仓库名称(例如
my-docker-registry),而非本地镜像标签
无需手动重打标签的正确用法
你之前手动打标签的操作是绕了弯路,rtDockerPush插件本身会自动完成镜像标签的重写与推送,正确的代码示例如下:
stage("Push image to Artifactory") { steps { // 直接推送本地构建好的镜像,无需手动重打标签 rtDockerPush ( serverId: artifactory_server, image: tag, // 本地镜像标签:my-image:SOME_GIT_COMMIT targetRepo: 'my-docker-registry' // Artifactory中的Docker仓库名 ) // 发布构建信息 rtPublishBuildInfo ( serverId: artifactory_server ) } }
关于手动打标签能成功的原因
你之前手动将本地镜像打标签为artifactory.example.com/my-docker-registry/my-image:latest时,插件会自动从这个完整标签中解析出目标仓库名my-docker-registry,同时识别到这个带URL的标签对应的本地镜像存在,所以能推送成功。但这不是插件的标准用法,属于“巧合适配”。
之前报错的根源
你最初未手动打标签时出现“Image not found”,是因为错误地将本地镜像标签传给了targetRepo,而image参数传的是带Artifactory URL的标签——此时本地Docker中根本不存在这个带URL的镜像,自然会报错。
内容的提问来源于stack exchange,提问作者Xophmeister
相关产品推荐
相关产品推荐

