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

为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:40:38