number name currentbuild current jenkins jenkins-workflow jenkins-pipeline

name - Jenkins Pipeline accede a las variables de entorno



jenkins pipeline project name (4)

Bueno, esto realmente me molestó por un tiempo hoy. En última instancia, estaba terminando con un par de cosas:

  • Las cadenas de comillas simples en Groovy significan "no evaluar variables", tal como lo hace en bash
  • Usar $ interpolación es completamente innecesario si solo estás haciendo referencia a la variable, así que solo puedes hacer env.JOB_NAME .

Esta pregunta de SO resultó ser la que me ayudó a descifrar el código: Jenkins Workflow Checkout Accediendo a BRANCH_NAME y GIT_COMMIT

Estoy tratando de usar tuberías DSL en Jenkins. Pensé que sería bueno si pudiera usar el nombre del proyecto como parte de mi script.

git credentialsId: ''ffffffff-ffff-ffff-ffff-ffffffffffffff'',/ url: "${repo_root}/${JOB_NAME}.git"

Me sale el error

groovy.lang.MissingPropertyException: / No such property: JOB_NAME for class: groovy.lang.Binding

Pensé que seguí estas instrucciones y mencionan JOB_NAME como una de las variables.

Decidí intentarlo

sh ''env''

en mi DSL, y esto imprime:

JOB_NAME = foo-bar

que es lo que espero.

Otro blog menciona :

Uso de variables de entorno
Tenemos dos formas de obtener su valor. Las propiedades pasadas por -D= durante el inicio podríamos leer como System.getProperty("key") gracias a la fuerte relación de Groovy con Java.

La lectura de variables de entorno normales de forma Java es System.getenv("VARIABLE") ...

Intentemos esto:

println "JOB_NAME = " + System.getenv(''JOB_NAME'');

Ahora, me sale:

java.lang.NullPointerException: Cannot get property ''System'' on null object

Objeto nulo? ¡Pero, puedo ver que JOB_NAME es una variable de entorno!

¿Cómo leo $JOB_NAME en un script DSL en un trabajo de Pipeline? Estoy intentando un trabajo de Pipeline, y cuando lo consiga, lo convertiré en un Pipeline Jenkinsfile con un Jenkinsfile .


De hecho, solo use ${env.JOB_NAME} para acceder a una variable conocida.

Sin embargo, si necesita acceder a la variable de entorno donde el nombre viene dado por otra variable (acceso dinámico), simplemente use env["your-env-variable"] .

Tuve el problema donde configuré 3 variables de entorno (en Jenkins -> Administer -> Configure System -> Environment variables ), llamémoslas ENV_VAR_1 , ENV_VAR_2 , ENV_VAR_3 . Ahora quiero acceder dinámicamente a ellos, puedo hacerlo como tal:

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

Mis variables de entorno en la configuración de Jenkins se ven así:


Se puede acceder a todas las variables de entorno utilizando env , por ejemplo, ${env.JOB_NAME} .


Tuve un problema con esto no funciona. Las variables de entorno / propiedades establecidas globalmente solo estaban disponibles dentro de un paso de node . Es un error en la versión 2.4 del plugin Pipeline. Actualice a 2.5 si se enfrenta a este problema y sus propiedades globales estarán disponibles en cualquier lugar del script. He publicado esto en el wiki de Jenkins here con el script de prueba que usé.