繁体   English   中英

在Jenkins管道中,使用bash迭代文件会因MissingPropertyException而失败

[英]Iterate over files in bash, in Jenkins pipeline, fails with MissingPropertyException

我在Jenkins中有Pipeline作业,并且有一个执行此bash脚本的步骤:

sh """
      $ANDROID_HOME/platform-tools/adb pull /sdcard/Pictures/screenshots
      if [ "$DEFAULT_LOCALE" = "en" ]
      then
          DEFAULT_LOCALE="en-US"
      fi

      if [ "${env.UPDATE_BASE}" == "true" ] || [ ! -d "${env.CACHE_HOME}/${env.BRANCH}" ]; then
        if [ ! -d "${env.CACHE_HOME}/${env.BRANCH}" ]; then
          mkdir -p ${env.CACHE_HOME}/${env.BRANCH}
        fi
        for imgfile in screenshots/*.png; do
          if [[ $imgfile == *"_${env.DEFAULT_LOCALE}-"*.png ]]; then
            cp -rf screenshots/$imgfile ${env.CACHE_HOME}/${env.BRANCH}
          fi
        done
      else
        rm -f screenshots/*_${env.DEFAULT_LOCALE}-*.png
        cp -rf ${env.CACHE_HOME}/${env.BRANCH}/* screenshots
      fi
    """

但是,当管道到达此步骤时,它将失败并显示以下错误:

groovy.lang.MissingPropertyException: No such property: imgfile for class: groovy.lang.Binding

脚本有什么问题?

如果所有变量都是shell变量,那么您应该使用三重单引号。

如果你混合使用shell和Groovy变量(或者只有Groovy变量),那么你应该使用三重双引号。

为了在后一种情况下推迟对shell变量的评估,你需要使用这些形式之一来逃避它们的美元符号(我不确定哪个):

if [[ \$imgfile == *"_${env.DEFAULT_LOCALE}-"*.png ]]; then

要么

if [[ \\$imgfile == *"_${env.DEFAULT_LOCALE}-"*.png ]]; then

要么

if [[ ${'$'}imgfile == *"_${env.DEFAULT_LOCALE}-"*.png ]]; then

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM