首页 文章

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

提问于
浏览
5

我正在尝试使用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}'"

    // ...
}

我在詹金斯的错误中说:

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

1 回答

  • 4

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

    当在-d'$ '中使用它时,我怀疑它会在数据块中产生额外的(') . 数据块将要求JSON用单引号括起来,所以要确保包含它们 .

    不是一个Groovy人(双关语)你可能必须使用转义字符,它确保将正确的字符串传递给cURL命令 .

相关问题