Динамический поиск файла для загрузки на трубопровод Artifactory Jenkins - PullRequest
0 голосов
/ 19 июня 2019

У меня есть библиотека 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'

Выше, кажется, муравьиная картина. Я что-то упустил?

1 Ответ

0 голосов
/ 20 июня 2019

Я нашел проблему.Путь, с которым может работать findFiles, является относительным.Текущий каталог является каталогом рабочей области.

  def file_path = "*/*-${BUILD_NUMBER}-*/${file_name}.zip"
  def file = findFiles (glob: file_path)
...