New RelicデプロイメントAPI呼び出しを、Groovyパイプラインを使用してJenkinsビルドステップとして作成しようとしています。 Groovyスクリプトのシェル( '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/[編集済み] /workspace@tmp/durable-0f6c52ef/script.sh:2行目:予期しないEOF一致する `''の検索中
'json'変数には、末尾に一重引用符( ')が追加された文字列が含まれています。
これを-d '$ {json}' "で使用すると、データブロックで余分な( ')が発生するのではないかと思われます。データブロックでは、JSONを一重引用符で囲む必要があるため、それらを含めてください。
Groovyの人(しゃれたつもりではない)ではないため、エスケープ文字をいじる必要がある場合があります。これにより、cURLコマンドに正しい文字列が確実に渡されるようになります。