windows - examples - jenkins set env vars
Acceso a variables de entorno de compilaciĆ³n a partir de una secuencia de comandos groovy en un paso de compilaciĆ³n de Jenkins(Windows) (5)
En jenkins 2.x, con Groovy Plugin 2.0, al ejecutar SystemGroovyScript logré construir variables, como se muestra a continuación:
def build = this.getProperty(''binding'').getVariable(''build'')
def listener = this.getProperty(''binding'').getVariable(''listener'')
def env = build.getEnvironment(listener)
println env.MY_VARIABLE
Si está utilizando goovy del archivo, es suficiente con System.getenv(''MY_VARIABLE'')
simple
Estoy usando el plugin Scriptler, así que puedo ejecutar un guión maravilloso como un paso de compilación. Mis esclavos Jenkins se están ejecutando en Windows en modo de servicio. Con Scriptler, no necesito usar scripts de lotes de Windows.
Pero tengo problemas para obtener las variables de entorno en un paso de compilación ... Esto funciona:
System.getenv("BASE")
Donde BASE
es parte de los env-vars en jenkins startup. Sin embargo, me gustaría obtener
%JOB_NAME%
Si agrego un paso de compilación "Ejecutar Windows Batch Command":
echo %JOB_NAME%
Funciona. Si agrego un script de scriptler como un paso de compilación con la misma configuración:
println "JOB_NAME: " + System.getenv("JOB_NAME")
Me estoy poniendo:
JOB_NAME: null
Entonces, ¿cómo puedo llegar a las variables de entorno inyectado de un guión maravilloso como un paso de construcción?
Es posible que puedas obtenerlos así:
def thr = Thread.currentThread()
def build = thr?.executable
def envVarsMap = build.parent.builds[0].properties.get("envVars")
La única forma en que podía hacer que esto funcionara (en Linux) era seguir este consejo:
https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+System+Groovy+script
import hudson.model.*
// get current thread / Executor and current build
def thr = Thread.currentThread()
def build = thr?.executable
// if you want the parameter by name ...
def hardcoded_param = "FOOBAR"
def resolver = build.buildVariableResolver
def hardcoded_param_value = resolver.resolve(hardcoded_param)
println "param ${hardcoded_param} value : ${hardcoded_param_value}"
Esto está en Jenkins 1.624 corriendo en CentOS 6.7
La secuencia de comandos Scriptler Groovy no parece obtener todas las variables de entorno de la compilación. Pero lo que puedes hacer es forzarlos como parámetros del guión:
Cuando agrega el paso de creación de Scriptler en su trabajo, seleccione la opción "Definir parámetros de script"
Agregue un parámetro para cada variable de entorno que desee pasar. Por ejemplo, "Nombre: JOB_NAME", "Valor: $ JOB_NAME". El valor se ampliará desde el entorno de compilación de Jenkins utilizando variables de tipo ''$ envName'', la mayoría de los campos en la configuración de la configuración de trabajo admiten este tipo de expansión a partir de mi experiencia.
En su secuencia de comandos, debe tener una variable con el mismo nombre que el parámetro, para que pueda acceder a los parámetros con algo como:
println "JOB_NAME = $ JOB_NAME"
No he usado Sciptler yo mismo aparte de algunos experimentos, pero su pregunta planteó un problema interesante. ¡Espero que esto ayude!
oyente y objetos de construcción presentes durante la ejecución groovy del sistema. Puedes hacerlo:
def myVar = build.getEnvironment(listener).get(''myVar'')