У меня есть несколько уникальная настройка, в которой мне нужно иметь возможность динамически загружать файлы Jenkins, которые находятся за пределами src, который я создаю.Сами Jenkinsfiles обычно вызывают node (), а затем выполняют некоторые шаги сборки.Это приводит к тому, что несколько исполнителей будут израсходованы без необходимости, потому что мне нужно уже вызывать node (), чтобы использовать шаг загрузки для запуска Jenkinsfile или для выполнения groovy, если я прочитал Jenkinsfile как строку и выполнил ее.
То, что у меня есть в пользовательском интерфейсе работы сегодня:
@Library(value='myGlobalLib@head', changelog=fase) _
node{
load "${JENKINSFILES_ROOT}/${PROJECT_NAME}/Jenkinsfile"
}
Загружаемый Jenkinsfile обычно также вызывает node ().Например:
node('agent-type-foo'){
someBuildFlavor{
buildProperty = "some value unique to this build"
someConfig = ["VALUE1", "VALUE2", "VALUE3"]
runTestTarget = true
}
}
Это приводит к тому, что 2 исполнителя будут использованы во время выполнения конвейера.В идеале я загружаю Jenkinsfiles без первого вызывающего узла (), но всякий раз, когда я пытаюсь это сделать, я получаю сообщение об ошибке:
"Required context class hudson.FilePath is missing
Perhaps you forgot to surround the code with a step that provides this, such as: node"
Есть ли способ загрузить Jenkinsfile или выполнить groovy, не имея сначала hudson.Контекст FilePath?Кажется, я ничего не могу найти в документе.Я нахожусь в точке, где я собираюсь предварительно обработать Jenkinsfiles, чтобы удалить их первоначальный вызов node () и call node () со значением, которое использовал Jenkinsfile, а затем загрузить остальную часть файла, но это несколько слишкомхрупким для меня, чтобы быть счастливым.