如何在 jenkins 管道 groovy 脚本中使用 json 发出 curl 请求

How to make a curl request with json in jenkins pipeline groovy script

我正在尝试使用 Groovy 管道将 New Relic 部署 API 调用作为 Jenkins 构建步骤。由于在 groovy 脚本的 shell ('sh') 命令中同时使用了单引号和双引号,我遇到了麻烦。每当我执行以下命令时:

node {

    //...

    def json = '''\
    {"deployment": {"revision": "v1","user": "me"}}'
    '''

    sh "curl -o /dev/null -s -X POST 'https://api.newrelic.com/v2/applications/[redacted]/deployments.json' \
    -H 'X-Api-Key:[redacted]' \
    -H 'Content-Type: application/json' \
    -d '${json}'"

    // ...
}

我在 Jenkins 中收到一条错误消息:

/var/lib/jenkins/jobs/[redacted]/workspace@tmp/durable-0f6c52ef/script.sh: 第 2 行:在寻找匹配的`''

时出现意外的 EOF

'json' 变量包含一个带有额外尾随单引号 (') 的字符串。

当这个用于 -d '${json}'” 我怀疑它会导致数据块中出现额外的 (')。数据块需要将 JSON 括在单引号中,因此请确保包含这些内容。

不是 Groovy 人(双关语),您可能需要使用转义字符来确保将正确的字符串传递给 cURL 命令。

当我使用 Github 的 API.

创建一个在 Github 中创建新存储库的作业时,我遇到了类似的问题

我已经通过用引号替换单个刻度来修复它,并在 json 对象内转义引号,如下所示:

curl -H "Authorization: token ${ACCESSTOKEN}" --data "{\"name\":\"${REPONAME}\"}" https://api.github.com/orgs/Company/repos