web-dev-qa-db-de.com

Wie listet man alle `env'-Eigenschaften in jenkins pipeline job auf?

Bei einer jenkins 2.1-Buildpipeline injiziert jenkins eine Variable env in den Code node{}. Auf BRANCH_NAME kann beispielsweise mit zugegriffen werden

node {
    echo ${env.BRANCH_NAME}
    ...

Ich möchte all env -Eigenschaften in der Jenkins-Pipeline anzeigen.

Ich suche nach Code wie

node {
    for(e in env){
        echo e + " is " + ${e}
    }
    ...

das würde so etwas wie Echo

 BRANCH_NAME is myBranch2
 CHANGE_ID is 44
 ...
66

Ein anderer, prägnanterer Weg:

node {
    echo sh(returnStdout: true, script: 'env')
    // ...
}

vgl. https://jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#code-sh-code-Shell-script

63
mjfroehlich

Laut Jenkins Dokumentation für deklarative Pipeline :

sh 'printenv'

Für Jenkins Skriptpipeline :

echo sh(script: 'env|sort', returnStdout: true)

Das obige sortiert auch Ihre env-Werte zur Vereinfachung.

50
Wimateeka

Sie können das Ergebnis mit sh/bat step und readFile erreichen: 

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

Leider gibt env.getEnvironment() eine sehr begrenzte Karte von Umgebungsvariablen zurück.

14
luka5z

Die folgenden Arbeiten:

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

Beachten Sie, dass dies höchstwahrscheinlich bei der ersten Ausführung fehlschlägt und Sie die Genehmigung verschiedener grooviger Methoden für die Ausführung in Jenkins-Sandbox erfordern. Dies geschieht in "Jenkins/In-Process-Skriptgenehmigung verwalten".

Die Liste, die ich bekommen habe:

  • 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
  • BERUFSBEZEICHNUNG
  • JOB_URL
11
Omri Spector

Ich benutze das Blue Ocean-Plugin und nicht, dass jeder Umgebungseintrag einen eigenen Block erhält. Ich möchte einen Block mit allen Zeilen.

Drucke schlecht:

sh 'echo `env`'

Drucke schlecht:

sh 'env > env.txt'
for (String i : readFile('env.txt').split("\r?\n")) {
    println i
}

Druckt gut:

sh 'env > env.txt'
sh 'cat env.txt'

Druckt gut: (wie von @mjfroehlich erwähnt)

echo sh(script: 'env', returnStdout: true)
6
Jon Lauridsen

Hier ist ein schnelles Skript, das Sie als Pipeline-Job hinzufügen können, um alle Umgebungsvariablen aufzulisten:

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

Dadurch werden sowohl System- als auch Jenkins-Variablen aufgelistet.

6
Daniel

Die obigen Antworten sind nun aufgrund der neuen Pipeline-Syntax veraltet. Nachfolgend werden die Umgebungsvariablen gedruckt.

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

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

Warum all diese Kompliziertheit?

sh 'env'

macht was du brauchst (unter * nix)

3
Andrey Regentov

Plattformübergreifende Auflistung aller Umgebungsvariablen:

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

wenn Sie wirklich die Liste env durchlaufen möchten, machen Sie einfach Folgendes:

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

eine andere Möglichkeit, genau die Ausgabe zu erhalten, die in der Frage erwähnt wird:

envtext= "printenv".execute().text
envtext.split('\n').each
{   envvar=it.split("=")
    println envvar[0]+" is "+envvar[1]
}

Dies kann leicht erweitert werden, um eine Karte mit einer Teilmenge von Umgebungen zu erstellen, die einem Kriterium entsprechen:

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}
0
Roman

Ich nehme an, dass Sie das in Form eines Skripts brauchten, aber wenn jemand nur einen Blick in die Jenkins-Benutzeroberfläche werfen möchte, kann diese Liste gefunden werden, indem Sie den Abschnitt "Umgebungsvariablen" im Kontextmenü jedes Builds auswählen. Projekt auswählen => Build auswählen => Umgebungsvariablen

 enter image description here

0
claudod