variables de paso entre archivos maravillosos


9

Estoy gestionando muchos trabajos en Jenkins mediante el complemento DSL. Ese complemento está usando definiciones .groovy, así que creo que incluso si alguien no usa Jenkins, pero usar groovy puede ayudar.

En general, quiero crear un archivo adicional, que puede ser un archivo maravilloso, JSON o YAML, lo que sea. Es importante la posibilidad de conectar ese archivo con mi archivo .groovy.

En ese archivo, estoy definiendo variables (en lugar de solo cadenas) por ejemplo, dirección IP u otras cosas, por ejemplo.

ip_gitlab: 1.2.3.4
default_user: admin

En mis maravillosos archivos, quiero poder usar estas variables.

Ese enfoque es posible en groovy?


Por supuesto que es posible. Por ejemplo, hay groovy-lang.org/json.html .
Huele el

Si es posible definir classpath adicional en el complemento DSL. luego colóquelo en la carpeta que agregará a los archivos geniales classpath como class GLOBAL{ def a=111; def b=222; }. entonces en el código deberías poder acceder a élGLOBAL.a
daggett

@daggett Estaba intentando como escribiste y siempre tengo un error: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'org.codehaus.groovy.runtime.InvokerHelper$1@641eff69' with class 'org.codehaus.groovy.runtime.InvokerHelper$1' to class 'javaposse.jobdsl.dsl.JobParent' este error ocurre durante el procesamiento de tu clase GLOBAL
rafal1337

olvidé . para cada variable definida debe haber un staticprefijo. class GLOBAL{ static def a=111; static def b=222; }. Pero el error que tienes es extraño. ¿podría mostrar la variable que ha declarado y cómo la usa en dsl?
daggett

1. Mi configuración de dsl postimg.cc/TLHK5k6h 2. error durante el procesamiento de dsl postimg.cc/21F37jDs
rafal1337

Respuestas:


3

Sugiero usar un archivo de propiedades como @JBaruch escribió

ip_gitlab=1.2.3.4
default_user=admin

Y cargarlo

Properties properties = new Properties()
File propertiesFile = new File('test.properties')
propertiesFile.withInputStream {
    properties.load(it)
}

Entonces puede usarlo, obtener ip por ejemplo:

def ipPropertyName= 'ip_gitlab'
properties."$ipPropertyName"

2
Esta es una copia mínimamente atribuida de la otra publicación; al menos querrás seguir las pautas de referencia y nombrar al autor.
Martijn Pieters

Desafortunadamente, eso no funciona en Jenkins DSL, no puedo encontrar el archivo con propiedades, pero este archivo es la misma carpeta ...FATAL: test.properties (No such file or directory) java.io.FileNotFoundException: test.properties (No such file or directory)
rafal1337

@ rafal1337 ¿Intentó usar la ruta parcial / completa del archivo?
user7294900

@ user7294900 Sí, estaba intentando múltiples rutas pero sin efecto positivo.
rafal1337


2

Haga un archivo maravilloso y defina información general y uso load.

Por ejemplo, hello.conf (escrito por groovy)

build_name = 'hello'

build_config = [
    'git': 'your git repository',
    'build_job': ['bulid_a', 'build_b']
]

Y úsalo por load

load 'hello.conf'

println(build_name)
for (job in build_config['build_job']) {
    build job: job
}

se ve bien pero en el complemento DSL en Jenkins no funciona:ERROR: (pipeline.groovy, line 1) No signature of method: pipeline.load() is applicable for argument types: (java.lang.String) values: [a_test.groovy]Possible solutions: job(java.lang.String), find(), folder(java.lang.String), job(java.lang.String, groovy.lang.Closure), find(groovy.lang.Closure), wait()
rafal1337

2

si desea una respuesta específica de Jenkins: Hay un complemento de proveedor de archivos de configuración para jenkins.

Puede almacenar archivos de configuración / propiedades a través de archivos administrados. Vaya a Administrar Jenkins> Archivos administrados y cree un nuevo archivo. Es compatible con .groovy, .json, .xml y muchos otros.

Una vez que tenga eso, puede cargar dicho archivo dentro de un trabajo utilizando la casilla de verificación Proporcionar archivo de configuración que cargará el archivo en una variable env automáticamente.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.