为Jenkins中调用API POST的PowerShell脚本添加参数
解决Jenkins Groovy变量传递到PowerShell POST请求体的问题
问题核心是你用了Groovy的单引号多行字符串包裹PowerShell脚本,这种写法下Groovy不会解析内部的变量,导致BuildVersion的值无法传递到PowerShell中。以下是两种可行的解决方法:
方法一:用PowerShell对象转JSON(推荐,避免格式错误)
通过PowerShell哈希表构建请求体对象,再转成JSON字符串,既不用手动处理引号转义,也能兼容BuildVersion中的特殊字符:
def BuildVersion = currentBuild.description echo BuildVersion powershell """ \$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]" \$headers.Add("Content-Type", "application/json") \$headers.Add("Authorization", "token") # 用哈希表构建内容,自动转成合法JSON \$bodyObject = @{ value = "${BuildVersion}" } \$body = \$bodyObject | ConvertTo-Json \$response = Invoke-RestMethod 'https://api.clickup.com/api/v2/task/task_id/field/field_id' -Method 'POST' -Headers \$headers -Body \$body \$response | ConvertTo-Json """
关键说明:
- 把PowerShell脚本的包裹符从
'''改为""",让Groovy解析内部的${BuildVersion}变量 - PowerShell中的
$需要转义为\$,防止Groovy将其识别为自身变量 - 用
ConvertTo-Json生成JSON,避免手动拼接时的引号冲突和格式错误
方法二:手动拼接JSON字符串(适合简单场景)
如果坚持手动写JSON,需处理好Groovy和PowerShell的双重转义:
def BuildVersion = currentBuild.description echo BuildVersion powershell """ \$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]" \$headers.Add("Content-Type", "application/json") \$headers.Add("Authorization", "token") \$body = "{\`n \`"value\`": \`"${BuildVersion}\`"\`n}" \$response = Invoke-RestMethod 'https://api.clickup.com/api/v2/task/task_id/field/field_id' -Method 'POST' -Headers \$headers -Body \$body \$response | ConvertTo-Json """
关键说明:
- 同样用
"""包裹脚本实现变量插值 - PowerShell中的反引号
需要转义为`,避免Groovy误解析 - 注意:如果
BuildVersion包含双引号,手动拼接的JSON会失效,因此不推荐这种方式
内容的提问来源于stack exchange,提问作者Peter Wilson
相关产品推荐
相关产品推荐

