Bei einer Build-Pipeline von Jenkins 2.1 injiziert Jenkins eine env
Variable in die node{}
. Zum Beispiel BRANCH_NAME
kann mit zugegriffen werden
node {
echo ${env.BRANCH_NAME}
...
Ich möchte alle env
Eigenschaften innerhalb der Jenkins-Pipeline wiedergeben
... wenn man bedenkt, dass ich nicht alle Eigenschaften im Voraus kenne .
Ich suche nach Code wie
node {
for(e in env){
echo e + " is " + ${e}
}
...
das würde so etwas wie widerhallen
BRANCH_NAME is myBranch2
CHANGE_ID is 44
...
jenkins
groovy
jenkins-pipeline
JamesThomasMoon1979
quelle
quelle
env.each { name, value -> println "Name: $name -> Value $value" }
drucktName: org.jenkinsci.plugins.workflow.cps.EnvActionImpl@45c2d1ee -> Value null
.new ClassName() { ... }
), sollte es funktionieren. Oder Sie führen es mit einer gekennzeichneten Methode aus@NonCPS
, dann funktionieren die Verschlüsse auch darin.Antworten:
Ein anderer, prägnanterer Weg:
vgl. https://jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#code-sh-code-shell-script
quelle
sh
mitbat
undenv
mitset
unter Windows.Laut Jenkins Dokumentation für deklarative Pipeline :
Für Jenkins Skript-Pipeline :
Das Obige sortiert auch Ihre Umgebungsvariablen für die Bequemlichkeit.
quelle
printenv
ist nur ein Shell-Befehl, der die Umgebung druckt, nichts spezielles für Jenkins. Ohne Argumente ist es gleichbedeutend mitenv
ohne Argumente. Ich bin mir ziemlich sicher, dasssh 'printenv | sort'
es in DCL oder einer Skript-Pipeline funktioniert.sh 'printenv | sort'
funktioniert tatsächlich für eine deklarative Jenkins-Pipeline; fwiwsh 'env | sort'
funktioniert auch (beide getestet auf Jenkins Version 2.46.1). Ich habe es ursprünglich erwähnt,sh 'printenv'
weil es in der offiziellen Jenkins-Dokumentation erwähnt wurde.Folgendes funktioniert:
Beachten Sie, dass es höchstwahrscheinlich bei der ersten Ausführung fehlschlägt und Sie verschiedene groovige Methoden genehmigen müssen, um in Jenkins Sandbox ausgeführt zu werden. Dies erfolgt unter "Verwalten der Genehmigung von Jenkins / In-Process-Skripten".
Die Liste, die ich bekommen habe, ist enthalten:
quelle
java.lang.UnsupportedOperationException: each on a CPS-transformed closure is not yet supported
@NonCPS
?Sie können das Ergebnis mit
sh
/bat
step und erreichenreadFile
:Leider wird nur eine
env.getEnvironment()
sehr begrenzte Karte von Umgebungsvariablen zurückgegeben.quelle
sh 'env > env.txt'
funktioniert gut und enthält Umgebungsvariablen, die vom Shell-Prozess erstellt wurden.env.getEnvironment()
zeigt nur die Jenkins-Set-Umgebungsvariablen, die eine Teilmenge der in dersh 'env'
Technik beobachteten Variablen sind . Außerdem ist eine Genehmigung für die Skriptsicherheit erforderlichmethod org.jenkinsci.plugins.workflow.support.actions.EnvironmentAction getEnvironment
. Dasenv.each { name, value -> println "Name: $name -> Value $value" }
von @Renato @Jayan empfohlene wird nur gedrucktName: org.jenkinsci.plugins.workflow.cps.EnvActionImpl@45c2d1ee -> Value null
.Warum all diese Kompliziertheit?
macht was du brauchst (unter * nix)
quelle
Hier ist ein schnelles Skript, das Sie als Pipeline-Job hinzufügen können, um alle Umgebungsvariablen aufzulisten:
Dadurch werden sowohl System- als auch Jenkins-Variablen aufgelistet.
quelle
Plattformübergreifende Auflistung aller Umgebungsvariablen:
quelle
Ich benutze das Blue Ocean Plugin und mochte nicht, dass jeder Umgebungseintrag einen eigenen Block bekommt. Ich möchte einen Block mit allen Zeilen.
Druckt schlecht:
Druckt schlecht:
Druckt gut:
Druckt gut: (wie von @mjfroehlich erwähnt)
quelle
Die obigen Antworten sind aufgrund der neuen Pipeline-Syntax jetzt veraltet. Unten werden die Umgebungsvariablen ausgedruckt.
quelle
for
mit einem Verschluss verursacht auch Probleme ohne@NonCPS
Anmerkung.Die reinen Groovy- Lösungen, die die globale
env
Variable lesen, drucken nicht alle Umgebungsvariablen (z. B. fehlen Variablen aus demenvironment
Block, aus demwithEnv
Kontext und den meisten maschinenspezifischen Variablen aus dem Betriebssystem). Mit Shell-Schritten ist es möglich, einen vollständigeren Satz zu erhalten, dies erfordert jedoch einennode
Kontext, der nicht immer erwünscht ist.Hier ist eine Lösung, die den
getContext
Schritt verwendet, um den vollständigen Satz von Umgebungsvariablen einschließlich der Pipeline-Parameter für den aktuellen Kontext abzurufen und zu drucken.Vorsichtsmaßnahme: Funktioniert nicht im Groovy-Sandkasten. Sie können es jedoch aus einer vertrauenswürdigen gemeinsam genutzten Bibliothek verwenden.
quelle
Wenn Sie die
env
Liste wirklich durchlaufen möchten, gehen Sie einfach wie folgt vor :quelle
Ein anderer Weg, um genau die in der Frage erwähnte Ausgabe zu erhalten:
Dies kann leicht erweitert werden, um eine Karte mit einer Teilmenge von Umgebungsvariablen zu erstellen, die einem Kriterium entsprechen:
quelle
Ich nehme an, Sie brauchten das in Form eines Skripts, aber wenn jemand anderes nur einen Blick auf die Jenkins-GUI werfen möchte, können Sie diese Liste finden, indem Sie den Abschnitt "Umgebungsvariablen" im Kontextmenü jedes Builds auswählen. Wählen Sie project = > Wählen Sie build => Umgebungsvariablen
quelle
Ich fand, dass dies der einfachste Weg ist:
quelle
Sie können alle Variablen von Ihrer Jenkins-Instanz abrufen. Nur besuchen:
quelle