[在Jenkins Pipeline内使用sh命令,似乎无法通过curl传递表示json主体的字符串以进行POST请求。
我在管道步骤中有以下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
令人讨厌的是,如果您要使用天然的时髦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/