Получить имя файла в Jenkinsfile - PullRequest
0 голосов
/ 13 июня 2018

Я создаю файл jenkins, и мне нужно сохранить часть имени файла в переменной, чтобы проверить, есть ли в нем слово.Например, если имя: project-xyz-TEST.ext, я хочу знать, заканчивается ли оно на -TEST.Из bash это возвращает слово TEST (если оно есть в названии):

$(echo ${$(ls - b *.ext | head -1)##*-} | cut -f 1 -d '.')

Но я не могу сохранить его в переменной в моем файле jenkinsfile (или не знаю как).Любой другой способ проверить это в jenkinsfile?

1 Ответ

0 голосов
/ 13 июня 2018

Синтаксис для выполнения регулярного выражения над строкой и сохранения перехвата в переменной:

var = string =~ /regex/

Например, используя ваш пример строки project-x.y.z-TEST.ext, где вы хотите сохранить перехватв переменной мы могли бы сделать:

var = 'project-x.y.z-TEST.ext' =~ /-([A-Z]+)\.ext/

Это вернуло бы true для успешной проверки регулярного выражения, а затем захватило TEST.Строка TEST будет затем присвоена переменной var.

Если строка имени файла была назначена переменной filename, мы изменим это следующим образом:

var = filename =~ /-([A-Z]+)\.ext/

Однако, поскольку ваша первоначальная проблема, как указано, состоит в простой проверке, содержит ли имя файла строку, то, что вам, вероятно, действительно нужно здесь, - это проверить строку в имени файла и сохранить логический результат.Это вместо того, чтобы хранить эту часть строки для выполнения условных проверок на равенство позже.В этом случае все, что вам действительно нужно, это:

test = filename =~ /-TEST\.ext/

, и при тестировании будет сохранено true для будущего условного использования.

Здесь необходимо отметить три важные вещи:

  • Вам необходимо точно настроить регулярное выражение и связанный с ним захват для вашего конкретного случая использования.Сделайте его более жадным или более ограничительным в зависимости от ваших ожидаемых совпадений и проверок.Я работал только с одним приведенным общим примером.

  • Переменные var и test должны быть присвоены null сразу после вашего последнего использования.Он не является сериализуемым и, следовательно, вызовет ошибку в конвейере Jenkins, если он будет сохраняться после его последнего использования.Например:

    var = filename =~ /-([A-Z]+)\.ext/
    print "Using ${var} for the first time."
    print "Using ${var} for the last time."
    var = null
    
  • Для декларативных синтаксических конвейеров эти примеры кода должны быть вложены в script {} блоков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...