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}
...
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
...
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
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.
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.
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:
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)
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.
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)
}
}
Warum all diese Kompliziertheit?
sh 'env'
macht was du brauchst (unter * nix)
Plattformübergreifende Auflistung aller Umgebungsvariablen:
if (isUnix()) {
sh env
}
else {
bat set
}
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"
}
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}
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