when scripts jenkins groovy jenkins-pipeline

scripts - ¿Cómo enumerar todas las propiedades `env` dentro del trabajo de canalización jenkins?



jenkinsfile scripts (12)

Dada una canalización de compilación de jenkins 2.1, jenkins inyecta una variable env en el node{} . Por ejemplo, se puede acceder a BRANCH_NAME con

node { echo ${env.BRANCH_NAME} ...

Quiero hacer eco de todas las propiedades env dentro de la tubería jenkins.

Estoy buscando un código como

node { for(e in env){ echo e + " is " + ${e} } ...

que haría eco de algo como

BRANCH_NAME is myBranch2 CHANGE_ID is 44 ...


¿Por qué toda esta complicación?

sh ''env''

hace lo que necesitas (bajo * nix)


Aquí hay un script rápido que puede agregar como trabajo de canalización para enumerar todas las variables de entorno:

node { echo(env.getEnvironment().collect({environmentVariable -> "${environmentVariable.key} = ${environmentVariable.value}"}).join("/n")) echo(System.getenv().collect({environmentVariable -> "${environmentVariable.key} = ${environmentVariable.value}"}).join("/n")) }

Esto enumerará las variables del sistema y de Jenkins.



Forma multiplataforma de enumerar todas las variables de entorno:

if (isUnix()) { sh env } else { bat set }


Las respuestas anteriores ahora son anticuadas debido a la nueva sintaxis de canalización. A continuación se imprimen las variables de entorno.

script { sh ''env > env.txt'' String[] envs = readFile(''env.txt'').split("/r?/n") for(String vars: envs){ println(vars) } }


Los siguientes trabajos:

@NonCPS def printParams() { env.getEnvironment().each { name, value -> println "Name: $name -> Value $value" } } printParams()

Tenga en cuenta que lo más probable es que falle en la primera ejecución y requiera que apruebe varios métodos geniales para ejecutarse en el sandbox de jenkins. Esto se hace en "administrar jenkins / aprobación de script en proceso"

La lista que obtuve incluía:

  • BUILD_DISPLAY_NAME
  • BUILD_ID
  • BUILD_NUMBER
  • BUILD_TAG
  • BUILD_URL
  • CAMINO DE CLASE
  • HUDSON_HOME
  • HUDSON_SERVER_COOKIE
  • HUDSON_URL
  • JENKINS_HOME
  • JENKINS_SERVER_COOKIE
  • JENKINS_URL
  • JOB_BASE_NAME
  • NOMBRE DEL TRABAJO
  • JOB_URL

Otra forma de obtener exactamente el resultado mencionado en la pregunta:

envtext= "printenv".execute().text envtext.split(''/n'').each { envvar=it.split("=") println envvar[0]+" is "+envvar[1] }

Esto se puede ampliar fácilmente para crear un mapa con un subconjunto de entornos que coincidan con un criterio:

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}



Puede lograr el resultado usando sh / bat step y readFile :

node { sh ''env > env.txt'' readFile(''env.txt'').split("/r?/n").each { println it } }

Desafortunadamente, env.getEnvironment() devuelve un mapa muy limitado de variables de entorno.


Supongo que lo necesitabas en forma de script, pero si alguien más solo quiere echar un vistazo a la GUI de Jenkins, esa lista se puede encontrar seleccionando la sección "Variables de entorno" en el menú contextual izquierdo de cada compilación. Seleccionar proyecto = > Seleccione build => Variables de entorno


Utilizo el complemento Blue Ocean y no me gustó que cada entrada de entorno tenga su propio bloque. Quiero un bloque con todas las líneas.

Imprime mal:

sh ''echo `env`''

Imprime mal:

sh ''env > env.txt'' for (String i : readFile(''env.txt'').split("/r?/n")) { println i }

Imprime bien:

sh ''env > env.txt'' sh ''cat env.txt''

Se imprime bien: (como lo menciona @mjfroehlich)

echo sh(script: ''env'', returnStdout: true)


si realmente quieres recorrer la lista env simplemente haz lo siguiente:

def envs = sh(returnStdout: true, script: ''env'').split(''/n'') envs.each { name -> println "Name: $name" }