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 comoSystem.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é.