Я пытаюсь динамически установить переменные среды в скрипте конвейера jenkins.
Я использую комбинацию скриптов. groovy и .jenkinsfile для генерации определений stage {} для конвейера как DRY насколько это возможно.
У меня есть метод ниже:
def generateStage(nameOfTestSet, pathToTestSet, machineLabel, envVarName, envVarValue)
{
echo "Generating stage for ${nameOfTestSet} on ${machineLabel}"
return node("${machineLabel}") {
stage(nameOfTestSet)
{
/////// Area of interest ////////////
environment {
"${envVarName} = ${envVarValue}"
}
/////////////////////////////////////
try {
echo "Would run: "+pathToTestSet
} finally {
echo "Archive results here"
}
}
}
}
Там работает некоторый код оболочки, но, абстрагируясь, мы бы заставили вызывающего абонента использовать:
generateStage("SimpleTestSuite", "path.to.test", "MachineA", "SOME_ENV_VAR", "ENV_VALUE")
Где последние два параметра - это имя среды (SOME_ENV_VAR
) и значение (ENV_VALUE
)
Эквивалентный декларативный код будет:
stage("SimpleTestSuite")
{
agent {
label "MachineA"
}
environment = {
SOME_ENV_VAR = ENV_VALUE
}
steps {
echo "Would run" + "path.to.test"
}
post {
always {
echo "Archive results"
}
}
}
Однако , при запуске этого сценария синтаксис environment
в первом блоке кода, похоже, вообще не влияет на фактическое выполнение. Если я повторяю $ {SOME_ENV_VAR} (или даже эхо $ {envVarName} в случае, если это имя переменной принималось как фактическое значение среды), они оба возвращают null.
Мне интересно, как лучше всего сделать этот раздел environment{}
как DRY / Dynami c, насколько это возможно?
Я бы предпочел его, если есть расширяемое решение, которое может принимать список пар environmentName = Value, так как это было бы более общим case.
Примечание. Я пробовал решение withEnv[]
для конвейеров со сценариями, но похоже, что это та же проблема.