Ich versuche, DSL-Pipelines in Jenkins zu verwenden. Ich dachte, es wäre schön, wenn ich den Projektnamen als Teil meines Skripts verwenden könnte.
git credentialsId: 'ffffffff-ffff-ffff-ffff-ffffffffffffff',\
url: "${repo_root}/${JOB_NAME}.git"
Ich bekomme den Fehler:
groovy.lang.MissingPropertyException: \
No such property: JOB_NAME for class: groovy.lang.Binding
Ich dachte, ich habe diese Anweisungen befolgt, und sie erwähnen JOB_NAME
als eine der Variablen.
Ich entschied mich zu versuchen:
sh 'env'
in meinem DSL und dies druckt aus:
JOB_NAME = foo-bar
das ist was ich erwarte.
Ein weiterer Blog erwähnt :
Verwendung von Umgebungsvariablen
Wir haben zwei Möglichkeiten, ihren Wert zu ermitteln. Die Eigenschaften, die während des Startvorgangs von-D=
übergeben wurden, konnten wir dank der starken Beziehung von Groovy zu Java alsSystem.getProperty("key")
lesen.Das Lesen normaler Umgebungsvariablen auf Java-Weise ist die
System.getenv("VARIABLE")
...
Lass uns das versuchen:
println "JOB_NAME = " + System.getenv('JOB_NAME');
Jetzt bekomme ich:
Java.lang.NullPointerException: Cannot get property 'System' on null object
Nullobjekt? Aber ich kann sehen, dass JOB_NAME
eine Umgebungsvariable ist!
Wie lese ich den $JOB_NAME
in ein DSL-Skript in einem Pipeline-Job ein? Ich versuche einen Pipeline-Job, und wenn ich damit fertig bin, wird dies eine Multibranch-Pipeline mit einer Jenkinsfile
.
Auf alle Umgebungsvariablen kann mit env
zugegriffen werden, z. ${env.JOB_NAME}
.
Okay, das ärgert mich heute für eine Weile. Letztendlich wurde ich mit ein paar Dingen beschäftigt:
env.JOB_NAME
verwenden.Diese SO - Frage hat mir geholfen, den Code zu knacken: Jenkins Workflow Checkout Zugriff auf BRANCH_NAME und GIT_COMMIT
Verwenden Sie einfach ${env.JOB_NAME}
, um auf eine bekannte Variable zuzugreifen.
Wenn Sie jedoch auf eine Umgebungsvariable zugreifen müssen, deren Name von einer anderen Variablen angegeben wird (dynamischer Zugriff), verwenden Sie einfach env["your-env-variable"]
.
Ich hatte das Problem, dass ich 3 Umgebungsvariablen (in Jenkins -> Administer -> Configure System -> Environment variables
) konfiguriert habe, nennen wir sie ENV_VAR_1
, ENV_VAR_2
, ENV_VAR_3
. Nun möchte ich dynamisch auf sie zugreifen, ich kann dies als solche tun:
def envVarName = "ENV_VAR_" + count // Suppose count is initialized in a loop somewhere above...
def value = env[envVarName] // Will be resolved to env["ENV_VAR_1"] depending on count value
Meine Umgebungsvariablen in der Jenkins-Konfiguration sehen folgendermaßen aus:
Ich hatte ein Problem damit, dass es nicht funktioniert. Die global festgelegten Eigenschaften/Umgebungsvariablen waren nur in einem Schritt node
verfügbar. Es ist ein Fehler in Version 2.4 des Pipeline-Plugins. Aktualisieren Sie auf 2.5, wenn Sie dieses Problem haben und Ihre globalen Eigenschaften an einer beliebigen Stelle im Skript verfügbar sind. Ich habe dies im Jenkins-Wiki hier mit dem von mir verwendeten Testskript gepostet.