Вот отформатированный, надеюсь, полезный ответ, после попытки разобраться с их подробной документацией.
Прежде всего, блок environment
объявляет пары ключ-значение уровня Дженкинса:
Уровень Дженкинса не является уровнем рабочей области, уровень интерполяции переменной выбирается в зависимости от типа кавычек, поэтому, если я правильно понял:
echo '$PATH'
будет отображать рабочую область PATH
(«по умолчанию», в вашем случае)
echo "$PATH"
будет интерпретироваться Дженкинсом, следовательно, будет отображаться «модифицированный» PATH
Допустимы только пары ключ-значение: хотя это выглядит как установка переменной среды оболочки, вы также можете написать PATH = something
, тогда как пробелы вокруг =
не будут работать в оболочке
ItПохоже, что в основном предполагалось выставлять параметры без ведома рабочей области, зная их, как если бы пользователь в интерактивном режиме предоставлял информацию (они много говорят о полномочиях).
Во-вторых, только ограниченный список шагов делает допустимые вызовы, и шага export
нет.
Но есть шаг withEnv
, который должен выполнить эту работу.Я не нашел ни одного примера в декларативном pipeline { ... }
, только в скриптовых блоках node { ... }
, определение декларативной версии гласит, что все шаги допустимы.И я нашел пример шага, оборачивающего блок stage
(хотя в node
), поэтому будем надеяться, что он одинаков для stages
(в противном случае вам придется указывать withEnv
для каждого stage
-или в качестве другой обертки внутри stage
- для этого нужны моды вашей среды: конечно, выполнимо, но так скучно).
Что-то вроде этого должно сработать или, по крайней мере, заслуживает попытки:
pipeline {
agent { ... }
environment {
HOME="."
NPM_CONFIG_PREFIX="${pwd()}/.npm-global"
PATH="$PATH:${pwd()}/.npm-global/bin:${pwd tmp: true}/.npm-global/bin"
}
withEnv(["PATH=$PATH", /*or*/ "PATH=${PATH}", /*or*/ "PATH+NPM=${pwd()}/.npm-global/bin:${pwd tmp: true}/.npm-global/bin"]) {
stages {
stage('NPM Config') {
steps { ... }
}
stage('something else that needs ng') { ... }
}
}
}
Ну, вы поняли.
Наконец, если эта вещь PATH
не работает и беспокоит вас больше, чем переписывает конвейер, использование скриптовой альтернативы с блоками node
может быть интересным и весьма кстати.более гибким.
Я бы хотел получить отзыв об этом от ОП или любого гуру Дженкинса!