#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. Это добавляет намного больше гибкости.