У меня есть библиотека Groovy, которая берет файл в каталоге и загружает его на удаленный хост.
Местоположение загружаемых артефактов изменяется динамически. Поэтому я пытаюсь найти файл на основе регулярных выражений. Вот фрагмент кода.
def file = findFiles (glob: '$WORKPLACE/**/*-${BUILD_NUMBER}-*/${file_name}.zip')
Однако, параметр файла возвращает пустой список. Даже если я вижу, что конкретный файл, который я хочу загрузить, существует в каталоге.
Есть ли способ найти путь к файлу и использовать его в функции?
EDIT1
Я даже заменил findFiles
на простой ls
. Я вижу ошибку, что No such file or directory
. Но когда я выполняю тот же ls
с тем же регулярным выражением, я вижу файл в файловой системе. Этот файл создается на предыдущих этапах конвейера. Почему будущие шаги не могут найти файл?
def file = sh (script: "ls '$WORKPLACE/**/*-${BUILD_NUMBER}-*/${file_name}.zip'", returnStdout: true).trim()
ПРИМЕЧАНИЕ. Разрешение для файла - 644, и оно принадлежит пользователю Jenkins.
EDIT2
По какой-то причине это работает. Это находит файл точно. Почему это?:
sh '''
ls $WORKPLACE/**/*-${BUILD_NUMBER}-*/${file_name}.zip
'''
EDIT3
Я переместил регулярное выражение из findFiles
на тот случай, если переменные были подставлены неправильно.
def file_path = "$WORKPLACE/**/*-${BUILD_NUMBER}-*/${file_name}.zip"
def file = findFiles (glob: file_path)
Теперь я получаю следующую ошибку:
java.io.IOException: Expecting Ant GLOB pattern, but saw '/app/jenkins/workspace/job/**/*-21-*/file.zip'
Выше, кажется, муравьиная картина. Я что-то упустил?