如何在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
相关产品推荐
相关产品推荐

