如何在Jenkins脚本化流水线中从Artifactory搜索制品?ArtifactoryChoiceListProvider求助
在Jenkins脚本化流水线中从Artifactory搜索制品及解决ArtifactoryChoiceListProvider失效问题
我来帮你梳理这两个问题的解决方案,先从基础的Artifactory制品搜索说起,再针对性解决你遇到的ArtifactoryChoiceListProvider在input步骤里的问题。
一、在脚本化流水线中搜索Artifactory制品
要在Jenkins脚本化流水线里搜索Artifactory的制品,最可靠的方式是使用官方Artifactory插件提供的API,步骤如下:
前提准备:确保Jenkins已安装Artifactory插件,且在系统配置中添加了你的Artifactory服务器实例(记下配置时的
Server ID,后续会用到)。流水线代码示例:
// 引入Artifactory共享库(Jenkins已配置的情况下) @Library('artifactory') _ // 获取已配置的Artifactory服务器实例 def artifactoryServer = Artifactory.server('YOUR_ARTIFACTORY_SERVER_ID') // 方式1:按构建信息搜索(比如查找某构建的最新制品) def buildSearchResults = artifactoryServer.search { repositories 'your-target-repository' // 替换为你的目标仓库名 build name: 'your-build-name', number: 'LATEST' // 构建名+版本标识(LATEST表示最新构建) } // 方式2:按制品坐标/路径搜索(比如查找Maven组下的所有jar包) def artifactSearchResults = artifactoryServer.search { repositories 'your-maven-repo' artifact 'com.example:your-app:*' // Maven坐标通配符,也可使用路径模式'com/example/your-app/*/*.jar' } // 遍历并打印搜索结果 println "按构建搜索到的制品:" buildSearchResults.getResults().each { item -> println "制品名称:${item.name},完整路径:${item.fullPath}" } println "\n按坐标搜索到的制品:" artifactSearchResults.getResults().each { item -> println "制品名称:${item.name},版本:${item.properties['build.version']}" }
二、解决ArtifactoryChoiceListProvider在input步骤中失效的问题
你遇到的问题大概率是参数配置有误或插件兼容性问题,下面是经过验证的正确用法,以及常见排查点:
正确的脚本化流水线代码示例
@Library('artifactory') _ def selectedArtifact = input( message: '请选择需要部署的目标制品', parameters: [ choice( name: 'SELECTED_ARTIFACT', description: '从Artifactory选择制品', $class: 'ArtifactoryChoiceListProvider', serverId: 'YOUR_ARTIFACTORY_SERVER_ID', // 必须与系统配置的Server ID一致 repoKey: 'your-target-repo', // 目标仓库名称 pattern: 'com/example/your-app/*/*.jar', // 制品搜索路径模式,支持通配符 sortBy: 'VERSION', // 排序字段:可选NAME/VERSION/DATE sortOrder: 'DESC', // 排序顺序:可选ASC/DESC filter: '', // 可选:过滤条件,比如只显示包含RELEASE的版本 defaultValue: '' // 可选:默认选中的选项 ) ] ) // 输出选中的制品信息 println "你选择的制品是:${selectedArtifact.SELECTED_ARTIFACT}"
常见问题排查点
- 插件版本检查:确保Artifactory插件版本在3.10.0以上,旧版本可能存在脚本化流水线的兼容性问题,建议升级到最新稳定版。
- Server ID正确性:
serverId必须是Jenkins系统配置中Artifactory服务器的ID,而非Artifactory的URL,这是很多人容易踩的坑。 - 路径模式格式:
pattern参数需使用Artifactory的路径格式(用/分隔),比如Maven坐标com.example:your-app:1.0.0对应的路径是com/example/your-app/1.0.0/your-app-1.0.0.jar,通配符*可匹配任意内容。 - 权限验证:确保执行流水线的Jenkins用户拥有目标Artifactory仓库的读取权限,权限不足会导致搜索无结果。
- 共享库引入:如果未引入
@Library('artifactory') _,部分API可能无法正常调用,建议始终添加该行(前提是Jenkins已配置Artifactory共享库)。
如果按上述配置仍无法正常工作,可以到Jenkins系统日志(路径:Manage Jenkins → System Log)中查看具体错误信息,通常能定位到权限不足、配置错误等具体原因。
内容的提问来源于stack exchange,提问作者Maruf Aytekin
相关产品推荐
相关产品推荐

