passando variabili tra file groovy


9

Sto gestendo molti lavori in Jenkins tramite il plug-in DSL. Quel plug-in sta usando le definizioni .groovy, quindi penso che anche se qualcuno non usa Jenkins ma l'utilizzo di Groovy potrebbe essere di aiuto.

In generale, voglio creare un file aggiuntivo, che può essere un file groovy, JSON o YAML, qualunque cosa. È importante la possibilità di collegare quel file con il mio file .groovy.

In quel file, sto definendo le variabili (piuttosto solo le stringhe) per esempio indirizzo IP o altre cose ad es.

ip_gitlab: 1.2.3.4
default_user: admin

Nei miei file groovy, voglio essere in grado di usare queste variabili.

Quell'approccio è possibile in groovy?


certo che è possibile. Ad esempio c'è groovy-lang.org/json.html .
smelm

Se è possibile definire un percorso di classe aggiuntivo nel plug-in DSL. quindi metti nella cartella che aggiungerai ai file groovy classpath come class GLOBAL{ def a=111; def b=222; }. allora nel codice dovresti essere in grado di accederviGLOBAL.a
daggett

@daggett Ci stavo provando mentre scrivevi e ho sempre avuto un errore: 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' questo errore si verifica durante l'elaborazione della tua classe GLOBAL
rafal1337

Ho dimenticato . per ogni variabile definita dovrebbe esserci un staticprefisso. class GLOBAL{ static def a=111; static def b=222; }. ma l'errore che hai è strano. potresti mostrare la variabile che hai dichiarato e come la usi in dsl.
Daggett,

1. La mia configurazione del dsl postimg.cc/TLHK5k6h 2. errore durante l'elaborazione del dsl postimg.cc/21F37jDs
rafal1337

Risposte:


3

Suggerisco di usare un file delle proprietà come ha scritto @JBaruch

ip_gitlab=1.2.3.4
default_user=admin

E caricalo

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

Quindi puoi usarlo, ottieni ip per esempio:

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

2
Questa è una copia minimamente attribuita dall'altro post; vorresti almeno seguire le linee guida di riferimento e nominare l'autore.
Martijn Pieters

Unfornetly che non funziona in Jenkins DSL, non riesce a trovare il file con le proprietà, ma questo file è la stessa cartella ...FATAL: test.properties (No such file or directory) java.io.FileNotFoundException: test.properties (No such file or directory)
rafal1337

@ rafal1337 Hai provato a utilizzare il percorso parziale / completo del file?
user7294900,

@ user7294900 Sì, stavo provando più percorsi ma senza effetti positivi.
rafal1337,


2

Crea file groovy e definisci alcune informazioni generali e utilizzali load.

Ad esempio, ciao.conf (scritto da groovy)

build_name = 'hello'

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

E usalo per load

load 'hello.conf'

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

sembra buono ma nel plugin DSL in Jenkins non funziona: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

se si desidera una risposta specifica di Jenkins: esiste un plug- in Config File Provider per jenkins.

È possibile memorizzare i file di configurazione / proprietà tramite i file gestiti. Vai su Gestisci Jenkins> File gestiti e crea un nuovo file. Supporta .groovy, .json, .xml e molti altri.

Una volta ottenuto ciò, è possibile caricare detto file all'interno di un lavoro utilizzando la casella di controllo Fornisci file di configurazione che caricherà automaticamente il file in una variabile env.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.