web-dev-qa-db-ja.com

JenkinsパイプラインのGroovyスクリプトでJSONを使用してカールリクエストを作成する方法

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一致する `''の検索中

8
MarkRoland

'json'変数には、末尾に一重引用符( ')が追加された文字列が含まれています。

これを-d '$ {json}' "で使用すると、データブロックで余分な( ')が発生するのではないかと思われます。データブロックでは、JSONを一重引用符で囲む必要があるため、それらを含めてください。

Groovyの人(しゃれたつもりではない)ではないため、エスケープ文字をいじる必要がある場合があります。これにより、cURLコマンドに正しい文字列が確実に渡されるようになります。

6
REngland