Как перечислить все свойства `env` в задании трубопровода jenkins?

Учитывая создание 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
 ...

Ответ 3

Вы можете выполнить результат с помощью шага sh/bat и readFile:

node {
    sh 'env > env.txt'
    readFile('env.txt').split("\r?\n").each {
        println it
    }
}

К сожалению, env.getEnvironment() возвращает очень ограниченную карту переменных среды.

Ответ 4

Следующие работы:

@NonCPS
def printParams() {
  env.getEnvironment().each { name, value -> println "Name: $name -> Value $value" }
}
printParams()

Обратите внимание, что это скорее всего произойдет сбой при первом выполнении и потребует одобрения различных методов groovy для работы в изолированной песочнице jenkins. Это делается в "управлении jenkins/in-process script утверждение"

Список, который я включил:

  • BUILD_DISPLAY_NAME
  • BUILD_ID
  • BUILD_NUMBER
  • BUILD_TAG
  • BUILD_URL
  • CLASSPATH
  • HUDSON_HOME
  • HUDSON_SERVER_COOKIE
  • HUDSON_URL
  • JENKINS_HOME
  • JENKINS_SERVER_COOKIE
  • JENKINS_URL
  • JOB_BASE_NAME
  • JOB_NAME
  • JOB_URL

Ответ 5

Я использую плагин 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)

Ответ 6

Вот быстрый скрипт, который вы можете добавить в качестве конвейерного задания для перечисления всех переменных среды:

node {
    echo(env.getEnvironment().collect({environmentVariable ->  "${environmentVariable.key} = ${environmentVariable.value}"}).join("\n"))
    echo(System.getenv().collect({environmentVariable ->  "${environmentVariable.key} = ${environmentVariable.value}"}).join("\n"))
}

Это перечислит как системные переменные, так и переменные Jenkins.

Ответ 7

Ответы выше, теперь устарели из-за нового синтаксиса конвейера. Ниже распечатываются переменные среды.

script {
        sh 'env > env.txt'
        String[] envs = readFile('env.txt').split("\r?\n")

        for(String vars: envs){
            println(vars)
        }
    }

Ответ 8

Почему все это сложно?

sh 'env'

делает то, что вам нужно (под * nix)

Ответ 9

Кроссплатформенный способ перечисления всех переменных среды:

if (isUnix()) {
    sh env
}
else {
    bat set
}

Ответ 10

еще один способ получить именно результат, указанный в вопросе:

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}

Ответ 11

Я полагаю, что вам нужно это в форме сценария, но если кто-то еще просто хочет просмотреть графический интерфейс Jenkins, этот список можно найти, выбрав раздел "Переменные среды" в контекстном левом меню каждой сборки. Выберите проект => Выберите build => Переменные среды

enter image description here

Ответ 12

если вы действительно хотите env список env просто выполните:

def envs = sh(returnStdout: true, script: 'env').split('\n') envs.each { name → println "Name: $name" }