Ответ 1
Другой, более сжатый способ:
node {
echo sh(returnStdout: true, script: 'env')
// ...
}
ср. https://jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#code-sh-code-shell-script
Учитывая создание jenkins 2.1 build, дженкинс вводит переменную env
в node{}
. Например, BRANCH_NAME
можно получить с помощью
node {
echo ${env.BRANCH_NAME}
...
env
в рамках проекта jenkins.Я ищу код, например
node {
for(e in env){
echo e + " is " + ${e}
}
...
который будет напоминать что-то вроде
BRANCH_NAME is myBranch2
CHANGE_ID is 44
...
Другой, более сжатый способ:
node {
echo sh(returnStdout: true, script: 'env')
// ...
}
ср. https://jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#code-sh-code-shell-script
Согласно документация Jenkins для декларативный конвейер:
sh 'printenv'
Для Jenkins сценарий:
echo sh(script: 'env|sort', returnStdout: true)
Вышеуказанное также сортирует ваши env vars для удобства.
Вы можете выполнить результат с помощью шага sh
/bat
и readFile
:
node {
sh 'env > env.txt'
readFile('env.txt').split("\r?\n").each {
println it
}
}
К сожалению, env.getEnvironment()
возвращает очень ограниченную карту переменных среды.
Следующие работы:
@NonCPS
def printParams() {
env.getEnvironment().each { name, value -> println "Name: $name -> Value $value" }
}
printParams()
Обратите внимание, что это скорее всего произойдет сбой при первом выполнении и потребует одобрения различных методов groovy для работы в изолированной песочнице jenkins. Это делается в "управлении jenkins/in-process script утверждение"
Список, который я включил:
Я использую плагин Blue Ocean и не люблю, когда каждая запись среды получает свой собственный блок. Я хочу один блок со всеми строками.
Печатает плохо:
sh 'echo `env`'
Печатает плохо:
sh 'env > env.txt'
for (String i : readFile('env.txt').split("\r?\n")) {
println i
}
Хорошо печатает:
sh 'env > env.txt'
sh 'cat env.txt'
Хорошо печатает: (как упоминалось @mjfroehlich)
echo sh(script: 'env', returnStdout: true)
Вот быстрый скрипт, который вы можете добавить в качестве конвейерного задания для перечисления всех переменных среды:
node {
echo(env.getEnvironment().collect({environmentVariable -> "${environmentVariable.key} = ${environmentVariable.value}"}).join("\n"))
echo(System.getenv().collect({environmentVariable -> "${environmentVariable.key} = ${environmentVariable.value}"}).join("\n"))
}
Это перечислит как системные переменные, так и переменные Jenkins.
Ответы выше, теперь устарели из-за нового синтаксиса конвейера. Ниже распечатываются переменные среды.
script {
sh 'env > env.txt'
String[] envs = readFile('env.txt').split("\r?\n")
for(String vars: envs){
println(vars)
}
}
Почему все это сложно?
sh 'env'
делает то, что вам нужно (под * nix)
Кроссплатформенный способ перечисления всех переменных среды:
if (isUnix()) {
sh env
}
else {
bat set
}
еще один способ получить именно результат, указанный в вопросе:
envtext= "printenv".execute().text
envtext.split('\n').each
{ envvar=it.split("=")
println envvar[0]+" is "+envvar[1]
}
Это можно легко расширить, чтобы построить карту с подмножеством env vars, соответствующих критериям:
envdict=[:]
envtext= "printenv".execute().text
envtext.split('\n').each
{ envvar=it.split("=")
if (envvar[0].startsWith("GERRIT_"))
envdict.put(envvar[0],envvar[1])
}
envdict.each{println it.key+" is "+it.value}
Я полагаю, что вам нужно это в форме сценария, но если кто-то еще просто хочет просмотреть графический интерфейс Jenkins, этот список можно найти, выбрав раздел "Переменные среды" в контекстном левом меню каждой сборки. Выберите проект => Выберите build => Переменные среды
если вы действительно хотите env
список env
просто выполните:
def envs = sh(returnStdout: true, script: 'env').split('\n') envs.each { name → println "Name: $name" }