You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jenkins脚本化流水线中从Artifactory搜索制品?ArtifactoryChoiceListProvider求助

在Jenkins脚本化流水线中从Artifactory搜索制品及解决ArtifactoryChoiceListProvider失效问题

我来帮你梳理这两个问题的解决方案,先从基础的Artifactory制品搜索说起,再针对性解决你遇到的ArtifactoryChoiceListProvider在input步骤里的问题。

一、在脚本化流水线中搜索Artifactory制品

要在Jenkins脚本化流水线里搜索Artifactory的制品,最可靠的方式是使用官方Artifactory插件提供的API,步骤如下:

  1. 前提准备:确保Jenkins已安装Artifactory插件,且在系统配置中添加了你的Artifactory服务器实例(记下配置时的Server ID,后续会用到)。

  2. 流水线代码示例:

// 引入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}"

常见问题排查点

  1. 插件版本检查:确保Artifactory插件版本在3.10.0以上,旧版本可能存在脚本化流水线的兼容性问题,建议升级到最新稳定版。
  2. Server ID正确性:serverId必须是Jenkins系统配置中Artifactory服务器的ID,而非Artifactory的URL,这是很多人容易踩的坑。
  3. 路径模式格式:pattern参数需使用Artifactory的路径格式(用/分隔),比如Maven坐标com.example:your-app:1.0.0对应的路径是com/example/your-app/1.0.0/your-app-1.0.0.jar,通配符*可匹配任意内容。
  4. 权限验证:确保执行流水线的Jenkins用户拥有目标Artifactory仓库的读取权限,权限不足会导致搜索无结果。
  5. 共享库引入:如果未引入@Library('artifactory') _,部分API可能无法正常调用,建议始终添加该行(前提是Jenkins已配置Artifactory共享库)。

如果按上述配置仍无法正常工作,可以到Jenkins系统日志(路径:Manage Jenkins → System Log)中查看具体错误信息,通常能定位到权限不足、配置错误等具体原因。

内容的提问来源于stack exchange,提问作者Maruf Aytekin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:23:22