Dada una canalización de compilación de jenkins 2.1, jenkins inyecta una env
variable en node{}
. Por ejemplo, BRANCH_NAME
se puede acceder con
node {
echo ${env.BRANCH_NAME}
...
Quiero hacer eco de todas las env
propiedades dentro de la tubería de jenkins.
... considerando que no conozco todas las propiedades de antemano.
Estoy buscando un código como
node {
for(e in env){
echo e + " is " + ${e}
}
...
que se haría eco de algo como
BRANCH_NAME is myBranch2
CHANGE_ID is 44
...
jenkins
groovy
jenkins-pipeline
JamesThomasMoon1979
fuente
fuente
env.each { name, value -> println "Name: $name -> Value $value" }
imprimeName: org.jenkinsci.plugins.workflow.cps.EnvActionImpl@45c2d1ee -> Value null
.new ClassName() { ... }
), debería funcionar. O lo ejecuta en un método etiquetado@NonCPS
, luego los cierres también funcionarán dentro de eso.Respuestas:
Otra forma más concisa:
cf. https://jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#code-sh-code-shell-script
fuente
sh
conbat
yenv
conset
en Windows.Según la documentación de Jenkins para la canalización declarativa :
Para la canalización con guiones de Jenkins :
Lo anterior también clasifica sus variables env por conveniencia.
fuente
printenv
es solo un comando de shell que imprime el entorno, nada específico de Jenkins. Sin argumentos es equivalente aenv
sin argumentos. Estoy bastante seguro desh 'printenv | sort'
que funcionará en DCL o en una tubería con script.sh 'printenv | sort'
de hecho funciona para una tubería declarativa de Jenkins; fwiwsh 'env | sort'
también funciona (Ambos probados en Jenkins ver. 2.46.1). Lo mencioné originalmentesh 'printenv'
porque se mencionó en la documentación oficial de Jenkins.Los siguientes trabajos:
Tenga en cuenta que lo más probable es que falle en la primera ejecución y requiera que apruebe varios métodos maravillosos para ejecutar en jenkins sandbox. Esto se hace en "administrar jenkins / aprobación de script en proceso"
La lista que obtuve incluía:
fuente
java.lang.UnsupportedOperationException: each on a CPS-transformed closure is not yet supported
@NonCPS
?Puede lograr el resultado usando
sh
/bat
step yreadFile
:Desafortunadamente,
env.getEnvironment()
devuelve un mapa muy limitado de variables de entorno.fuente
sh 'env > env.txt'
funciona bien e incluye variables de entorno creadas por el proceso de shell.env.getEnvironment()
muestra solo las variables de entorno del conjunto de Jenkins, que son un subconjunto de las que se ven en lash 'env'
técnica. Además, necesita la aprobación de seguridad del scriptmethod org.jenkinsci.plugins.workflow.support.actions.EnvironmentAction getEnvironment
. Loenv.each { name, value -> println "Name: $name -> Value $value" }
recomendado por @Renato @Jayan solo imprimeName: org.jenkinsci.plugins.workflow.cps.EnvActionImpl@45c2d1ee -> Value null
.¿Por qué toda esta complicación?
hace lo que necesita (bajo * nix)
fuente
Aquí hay una secuencia de comandos rápida que puede agregar como un trabajo de canalización para enumerar todas las variables de entorno:
Esto enumerará las variables del sistema y de Jenkins.
fuente
Forma multiplataforma de enumerar todas las variables de entorno:
fuente
Utilizo el complemento Blue Ocean y no me gustó que cada entrada de entorno tuviera su propio bloque. Quiero un bloque con todas las líneas.
Imprime mal:
Imprime mal:
Imprime bien:
Imprime bien: (como lo menciona @mjfroehlich)
fuente
Las respuestas anteriores ahora son anticuadas debido a la nueva sintaxis de canalización. A continuación se imprimen las variables de entorno.
fuente
for
con un cierre también causará problemas sin una@NonCPS
anotación.Las soluciones Groovy puras que leen la
env
variable global no imprimen todas las variables de entorno (por ejemplo, les faltan variables delenvironment
bloque, delwithEnv
contexto y la mayoría de las variables específicas de la máquina del sistema operativo). Usando los pasos de shell es posible obtener un conjunto más completo, pero eso requiere unnode
contexto, que no siempre se desea.Aquí hay una solución que utiliza el
getContext
paso para recuperar e imprimir el conjunto completo de variables de entorno, incluidos los parámetros de canalización, para el contexto actual.Advertencia: no funciona en la caja de arena Groovy. Sin embargo, puede usarlo desde una biblioteca compartida confiable.
fuente
si realmente desea recorrer la
env
lista, simplemente haga:fuente
otra forma de obtener exactamente el resultado mencionado en la pregunta:
Esto se puede ampliar fácilmente para crear un mapa con un subconjunto de variables env que coincidan con un criterio:
fuente
Supongo que necesitabas eso 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 = > Seleccionar compilación => Variables de entorno
fuente
Encontré que esta es la forma más fácil:
fuente
Puede obtener todas las variables de su instancia de jenkins. Solo visita:
fuente