Перебирать файлы в bash, в конвейере Jenkins, происходит сбой с MissingPropertyException - PullRequest
0 голосов
/ 23 мая 2019

У меня есть конвейерное задание в Jenkins, и есть шаг, который выполняет этот сценарий 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

Что не так в скрипте?

1 Ответ

0 голосов
/ 24 мая 2019

Если все ваши переменные являются переменными оболочки, вам следует использовать тройные одинарные кавычки.

Если у вас есть сочетание переменных оболочки и Groovy (или только Groovy), вам следует использовать тройные двойные кавычки.

Чтобы отложить оценку переменных оболочки в последнем случае, вам нужно экранировать знаки доллара, используя одну из следующих форм (я не уверен, что):

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

или

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

или

if [[ ${'$'}imgfile == *"_${env.DEFAULT_LOCALE}-"*.png ]]; then
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...