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

如何在Jenkins的rtDownload中为pattern传递变量?

Jenkins Artifactory插件rtDownload变量传递问题解决方案

问题核心原因

问题源于Groovy字符串插值与JSON spec的解析逻辑冲突,直接在JSON字符串中引用变量时,若写法不当会导致变量未被正确解析。

有效解决方案

方法1:使用Groovy多行字符串实现变量插值

通过三重双引号包裹spec内容,确保变量jfrogrepo被正确解析:

// 从流水线参数获取版本号
def buildVersion = params.buildVersion
// 定义完整制品路径变量
def jfrogrepo = "my-local-repo/test-${buildVersion}.tar"

// 构建下载spec,三重双引号确保变量插值生效
def downloadSpec = """{
  "files": [
    {
      "pattern": "${jfrogrepo}",
      "target": "./downloads/"
    }
  ]
}"""

// 执行下载操作
rtDownload spec: downloadSpec

方法2:用Groovy Map构建spec后转JSON

这种方式完全规避字符串插值问题,通过Map传递变量更可靠:

def buildVersion = params.buildVersion
def jfrogrepo = "my-local-repo/test-${buildVersion}.tar"

// 用Map结构定义下载规则
def downloadSpecMap = [
  files: [
    [
      pattern: jfrogrepo,
      target: "./downloads/"
    ]
  ]
]

// 转换为JSON字符串后传入rtDownload
rtDownload spec: new groovy.json.JsonBuilder(downloadSpecMap).toPrettyString()

验证变量有效性

在rtDownload前添加打印语句,确认变量值是否符合预期:

echo "待下载制品路径:${jfrogrepo}"

替代下载方式

如果上述方法仍有问题,可尝试直接使用Artifactory REST API结合curl命令下载(需提前在Jenkins配置Artifactory凭证):

sh """
curl -u \${ARTIFACTORY_USER}:\${ARTIFACTORY_PASSWORD} \
https://your-artifactory-domain/artifactory/${jfrogrepo} \
-o ./downloads/test-${buildVersion}.tar
"""

内容的提问来源于stack exchange,提问作者Alexy Pulivelil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:05:02