如何在Jenkins多行shell脚本中使用bash变量

如何在Jenkins多行shell脚本中使用bash变量,bash,jenkins,groovy,Bash,Jenkins,Groovy,我尝试在Jenkins管道中使用bash变量,但没有成功 我的第一次尝试 sh """#!/bin/bash for file in *.map; do filename=`basename $file .map` echo "##### uploading ${$filename}" curl -X POST ${SERVER_URL}/assets/v1/sourcemaps \

我尝试在Jenkins管道中使用bash变量,但没有成功

我的第一次尝试

sh """#!/bin/bash
    for file in *.map; do
        filename=`basename $file .map`
        echo "##### uploading ${$filename}"

        curl  -X POST ${SERVER_URL}/assets/v1/sourcemaps \
              -F service_name="${SERVICE_NAME}" \
              -F service_version="${revision}" \
              -F bundle_filepath="${main_url}${filename}" \
              -F sourcemap="@${filename}.map" &
    done
    wait
"""
导致异常:MissingPropertyException:无此类属性:文件

第二次尝试,在看到这个答案之后

只是省略了bash变量。所以$filename是空的

在这种情况下,我需要如何对bash变量进行属性编码?

尝试以下方法:

sh """#!/bin/bash
    set -x    

    for file in *.map; do
        filename="\$(basename "\$file" .map)"
        echo "Uploading \$filename"

        curl  -X POST "${SERVER_URL}/assets/v1/sourcemaps" \
              -F service_name="${SERVICE_NAME}" \
              -F service_version="${revision}" \
              -F bundle_filepath="${main_url}\$filename" \
              -F sourcemap="@\${filename}.map" &
    done
    wait
"""

是否可以将bash脚本复制到Jenkins服务器上,然后像那样运行bash脚本?这样您就不需要尝试使用转义,所有Groovy变量都应该可以作为bash脚本中的环境变量进行访问。
sh """#!/bin/bash
    set -x    

    for file in *.map; do
        filename="\$(basename "\$file" .map)"
        echo "Uploading \$filename"

        curl  -X POST "${SERVER_URL}/assets/v1/sourcemaps" \
              -F service_name="${SERVICE_NAME}" \
              -F service_version="${revision}" \
              -F bundle_filepath="${main_url}\$filename" \
              -F sourcemap="@\${filename}.map" &
    done
    wait
"""