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

Jenkins中curl POST请求JSON数组参数引号缺失问题排查

问题解决:Jenkins curl请求体JSON引号缺失修复

问题根源

  1. curl请求的JSON体中,$A和$B变量直接插入,未被双引号包裹,导致生成的JSON数组元素缺少引号。
  2. Jenkinsfile调用shell脚本时,参数未用引号包裹,若参数含空格会被shell拆分,同时导致引号丢失。

具体修复步骤

1. 修正httprequest.sh脚本中的curl请求

将原来的--data行修改为以下两种方式之一:

方式一:变量拼接(直观易理解)

curl -X POST \
    -H "Authorization: $token" \
    -H "Accept: application/json" \
    -H "Content-type: application/json" \
    --data '{ "A": [ "'"$A"'" ], "B": [ "'"$B"'" ], "C": "'"$C"'" }' \
    "$environmentUrl"

解释:'"$A"'的写法是先关闭单引号,用双引号包裹变量(确保变量值被正确解析),再重新打开单引号,最终生成的JSON中会为数组元素自动加上双引号。

方式二:使用printf构建JSON(更安全,避免转义混乱)

先通过printf生成标准JSON字符串,再传入curl,同时按Jenkins传参顺序接收参数:

# $1对应Jenkins传递的params.A,$2对应params.B,$3对应params.C,$4对应token,$5对应environmentUrl
json_body=$(printf '{ "A": ["%s"], "B": ["%s"], "C": "%s" }' "$1" "$2" "$3")

curl -X POST \
    -H "Authorization: $4" \
    -H "Accept: application/json" \
    -H "Content-type: application/json" \
    --data "$json_body" \
    "$5"

2. 修正Jenkinsfile中的调用逻辑

给每个传递的参数加上单引号,防止参数含空格时被shell拆分,保证变量完整传递:

script {
    sh "sh scripts/httprequest.sh '${params.A}' '${params.B}' '${params.C}' '$token' '${params.environment}'"
}

修复后效果

修改完成后,CloudWatch日志中显示的请求体将符合预期:

"body": "{ \"A\": [ \"something\" ], \"B\": [ \"Something\" ], \"C\": \"\" }"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:50:30