如何在 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\"}'
"""
似乎不可能在 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\"}'
"""