如何在 groovy 中将 json 正文从 jenkins 管道传递到 curl 命令

How to pass json body to curl command from jenkins pipeline in groovy

似乎不​​可能在 Jenkins Pipeline 中使用 sh 命令为 POST 请求传递代表 json 正文的字符串。

我在管道步骤中有以下 sh 行:

def apiCmd = 'curl -X POST --user user:passe --data  \"{\"state\":\"' + stateStr + '\",\"context\":\"branch-regression\"}\"' + " --url ${Configuration.CommitStatusUpdateURL}

现在 Jenkins 实际上 运行 是什么:

curl -X POST --user user:pass--data '""state":"failure""' '""context":"branch-regression""' --url someurl

令人恼火的是,如果你想 运行 post 请求使用本地 groovy Jenkins 抱怨安全问题..如果你尝试使用 Curl 然后 JSON 没有很好地解析

试试这个:

def curlOut = sh script: """curl -X POST --user user:passe --data '{"state":"${stateStr}", "context": "branch-regression"}' --url ${Configuration.CommitStatusUpdateURL} """, returnOutput: true

以后,您可以转到 Jenkins 脚本控制台(位于 your.jenkins.url/script)和 运行,例如这个:

def stateStr = "OK"
def Configuration_CommitStatusUpdateURL = "https://www.x.com/"
println """curl -X POST --user user:passe --data '{"state":"${stateStr}", "context": "branch-regression"}' --url ${Configuration_CommitStatusUpdateURL} """ 

结果:

curl -X POST --user user:passe --data '{"state":"OK", "context": "branch-regression"}' --url https://www.x.com/

使用三个双引号 (""") 而不是三个单引号 '''' 例如:

sh """
curl --request POST --url https://yoururl.com/v1/data --header "Authorization: $TOKEN" --header "Content-Type: application/json" --header "client-ref-id: 34567" --data '{\"merchandiseCost\": ${COST},\"merchandiseDescription\": \"${DESCRIPTION}\",\"buyerName\": "${NAME}\",\"buyerPhoneNumber\": \"${PHONE}\",\"storeId\": \"164974727\"}'
"""