JenkinsFile のシェル スクリプト内の Groovy 変数にアクセスできない

JenkinsFile のシェル スクリプト内の Groovy 変数にアクセスできない
def NAMESPACE = "Dev"

def BODY= sh(
script:'''body=$(cat <<-EOF
{
    "name": "${NAMESPACE}",
    "type": "regularwebapp"
}
EOF
)
(echo $body)''',
returnStdout: true
).trim()

上記は機能しません。出力は次のようになります。

{
    "name": "",
    "type": "regularwebapp"
}

答え1

Groovy は、一重引用符 ( ') で囲まれた文字列内では変数の置換を実行しません。代わりに二重引用符 ( ") で囲まれた文字列を使用してください。この場合、非 Groovy 変数のエスケープも必要になります。

def NAMESPACE = "Dev"

def BODY= sh(
script:"""body=\$(cat <<-EOF
{
    "name": "${NAMESPACE}",
    "type": "regularwebapp"
}
EOF
)
(echo \$body)""",
returnStdout: true
).trim()

関連情報