如何在groovy中从jenkins管道将json主体传递给curl命令

如何在groovy中从jenkins管道将json主体传递给curl命令,curl,jenkins-pipeline,http-post,Curl,Jenkins Pipeline,Http Post,在Jenkins管道中,似乎不可能使用sh命令为带有curl的POST请求传递表示json主体的字符串 我在管道步骤中有以下sh线: def apiCmd = 'curl -X POST --user user:passe --data \\"{\\"state\\":\\"' + stateStr + '\\",\\"context\\":\\"branch-regression\\"}\\"' + " --url ${Configuration.CommitStatusUpdateURL}

在Jenkins管道中,似乎不可能使用sh命令为带有curl的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
令人恼火的是,如果您想用原生groovy Jenkins来运行post请求,则会抱怨安全性问题。。如果您尝试使用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/