В Jenkins, как мне сделать, чтобы подстрока параметра сборки была частью имени сборки?

#jenkins

#Дженкинс

Вопрос:

У меня есть параметризованное задание freestyle Jenkins, и я хотел бы включить часть одного из параметров в имя сборки. Вызывается интересующий меня параметр FILE_PATH . Из-за структуры файловых каталогов проекта, используемого этим заданием, путь к файлу всегда начинается с одной и той же строки длиной 9 символов. Итак, если FILE_PATH="somepath/what/I/want" я хотел бы, чтобы имя моей сборки было what/I/want .

Некоторые вещи, которые я пытался ввести в поле «Установить имя сборки», предоставляемое плагином установки имени сборки:

${FILE_PATH:9}

Это дало мне следующую ошибку:

 Failed to evaluate name macro:org.jenkinsci.plugins.tokenmacro.MacroEvaluationException: Unrecognized macro 'FILE_PATH' in '${FILE_PATH:9}'
 

${"FILE_PATH":9}

FILE_PATH просто обрабатывался как строка:

 New run name is '${"FILE_PATH":9}'
 

${$FILE_PATH:9}

Это просто привело к тому, что необработанное выражение было включено в FILE_PATH расширение:

 New run name is '${somepath/what/I/want:9}'
 

${ENV,var="FILE_PATH":9}

Это вообще не обрабатывалось:

 New run name is '${ENV,var="FILE_PATH":9}'
 

У меня установлен установщик имени сборки и плагины макроса токена. Я бы хотел сделать это в плагине имени сборки, если это возможно, хотя я могу установить любые другие плагины, которые мне нужны, чтобы заставить это работать.

Ответ №1:

${ENV:9,var="FILE_PATH"} следует делать то, что вы ищете.

Альтернативой является также исключение начала строки, насколько вы знаете, что это за строка:

 ${ENV#somepath/,var="FILE_PATH"}
 

В случае, если вам когда-нибудь понадобится удалить что-то из конца строки, используйте вместо % # .

Ответ №2:

Я предполагаю, что вы используете сценарий конвейера Jenkinsfile? Если это так, вы можете просто использовать метод groovy substring .

 variable.substring(9)
 

Не уверен, что вы можете сделать что-то подобное, используя параметризованные сборки.

Комментарии:

1. Извините, я использую задание в стиле freestyle. Я обновлю свой вопрос.

2. Это будет очень сложно в работе в стиле freestyle. Вероятно, вы можете попробовать использовать этап сборки groovy, а затем envinject? Я нахожу, когда вам нужно начать делать много пользовательских вещей в Jenkins, хотя очень полезно перейти на pipeline / Jenkinsfile. Это добавляет намного больше гибкости.