我正在尝试使用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 回答
'json'变量包含一个带有额外尾随单引号(')的字符串 .
当在-d'$ '中使用它时,我怀疑它会在数据块中产生额外的(') . 数据块将要求JSON用单引号括起来,所以要确保包含它们 .
不是一个Groovy人(双关语)你可能必须使用转义字符,它确保将正确的字符串传递给cURL命令 .