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

Mar*_*and 8 groovy jenkins newrelic

我正在尝试使用Groovy管道作为Jenkins构建步骤进行New Relic部署API调用。我很麻烦,因为在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}'"

    // ...
}
Run Code Online (Sandbox Code Playgroud)

我在詹金斯遇到一个错误,说:

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

小智 6

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

当在-d'$ {json}'“中使用它时,我怀疑它将在数据块中导致一个额外的(')。该数据块将要求JSON用单引号引起来,因此请确保其中包括了这些引号。

由于不是Groovy的人(双关语意味十足的人),您可能必须使用转义字符来进行游戏,以确保将正确的字符串传递给cURL命令。