2016-04-29 3 views
25

В настоящее время я делаю некоторую оценку плагина Jenkins Pipeline (ранее известного как плагин Workflow). Чтение документации я обнаружил, что я в настоящее время не могу retriev пути рабочего пространства с помощью env.WORKSPACE:Получить абсолютный путь к каталогу рабочей области в плагине Jenkins Pipeline

Следующих переменных в настоящее время недоступен внутри сценария рабочего процесса:

NODE_LABELS

WORKSPACE

SCM-специфичные переменные, такие как SVN_REVISION

Есть ли другой способ, как получить абсолютный путь к текущему рабочему пространству? Мне нужно, чтобы это выполняло некоторый тест, который, в свою очередь, получает некоторый параметр (абсолютный путь к некоторому исполняемому файлу). Я уже пробовал использовать new File("").absolutePath() внутри раздела @NonCPS, но похоже, что материал, не относящийся к CPS, всегда выполняется на главном компьютере.

Кто-нибудь знает, как получить этот путь без работает какой-то пакетный скрипт, который хранит путь в некоторый файл, который позже можно прочитать снова?

ответ

8

Начиная с версии 2.5 Pipeline Nodes and Processes Plugin (компонент плагина Pipeline, установленный по умолчанию) переменная среды WORKSPACE доступна снова. Эта версия была выпущена в 2016-09-23, поэтому она должна быть доступна во всех современных экземплярах Jenkins.

28

Примечание: это решение работает только в том случае, если ведомые устройства имеют ту же структуру каталогов, что и главный. pwd() вернет каталог рабочей области на мастер из-за JENKINS-33511.

Я использовал это, используя pwd() функциональность плагина конвейера. Так что, если вам нужно, чтобы получить рабочее место на рабе, вы можете сделать что-л так:

node('label'){ 
    //now you are on slave labeled with 'label' 
    def workspace = pwd() 
    //${workspace} will now contain an absolute path to job workspace on slave 
} 

Надеется, что это поможет.

+0

Черт. Наверное, нужны очки. Полностью пропущено, что есть pwd(). Это именно то, что я искал. Благодаря! –

+0

И все же, согласно обсуждению в [этом билете] (https://issues.jenkins-ci.org/browse/JENKINS-33511), 'pwd()' вернет рабочую директорию мастера, а не узел, на котором вы находитесь. –

+0

Факт, который я только что подтвердил сам. 'pwd()' будет _not_ работать с подчиненными, если только они не имеют ту же структуру каталогов, что и главный. –

0

Когда вы используете скрипт, концепция рабочего пространства не имеет смысла. Лучше всего использовать readFile для чтения файла в строку, а затем передать эту строку в вашу библиотеку для обработки. Метод pwd() не может помочь вам, потому что он выполняется на главном компьютере, и ваши файлы хранятся на узле.

Смежные вопросы