Übergeben von Variablen zwischen groovigen Dateien

9

Ich verwalte viele Jobs in Jenkins per DSL-Plugin. Dieses Plugin verwendet .groovy-Definitionen, daher denke ich, auch wenn jemand Jenkins nicht verwendet, aber groovy verwendet, kann dies möglicherweise helfen.

Im Allgemeinen möchte ich eine zusätzliche Datei erstellen, die eine groovige Datei sein kann, JSON oder YAML, was auch immer. Es ist wichtig, diese Datei mit meiner .groovy-Datei zu verbinden.

In dieser Datei definiere ich Variablen (eher nur Zeichenfolgen), zum Beispiel Adress-IP oder andere Dinge, z.

ip_gitlab: 1.2.3.4
default_user: admin

In meinen groovigen Dateien möchte ich diese Variablen verwenden können.

Dieser Ansatz ist in groovig möglich?

rafal1337
quelle
das ist natürlich möglich. Zum Beispiel gibt es groovy-lang.org/json.html .
Smelm
Wenn es möglich ist, einen zusätzlichen Klassenpfad im DSL-Plugin zu definieren. Legen Sie dann in den Ordner, den Sie zu Klassenpfad-Groovy-Datei (en) hinzufügen möchten, wie class GLOBAL{ def a=111; def b=222; }. dann im Code sollten Sie in der Lage sein, darauf zuzugreifenGLOBAL.a
daggett
@daggett Ich habe versucht, wie Sie geschrieben haben und immer habe ich Fehler: 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' Dieser Fehler tritt während der Verarbeitung Ihrer Klasse GLOBAL
rafal1337
Ich habe vergessen . Für jede definierte Variable sollte ein staticPräfix vorhanden sein. class GLOBAL{ static def a=111; static def b=222; }. Aber ein Fehler, den Sie haben, ist seltsam. Könntest du die Variable anzeigen, die du deklariert hast und wie du sie in dsl verwendest?
Daggett
1. Meine Konfiguration der dsl postimg.cc/TLHK5k6h 2. Fehler während der dsl-Verarbeitung postimg.cc/21F37jDs
rafal1337

Antworten:

3

Ich schlage vor, eine Eigenschaftendatei zu verwenden, wie @JBaruch geschrieben hat

ip_gitlab=1.2.3.4
default_user=admin

Und lade es

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

Dann können Sie es verwenden, erhalten Sie zum Beispiel IP:

def ipPropertyName= 'ip_gitlab'
properties."$ipPropertyName"
user7294900
quelle
2
Dies ist eine minimal zugeschriebene Kopie des anderen Beitrags. Sie möchten zumindest die Referenzierungsrichtlinien befolgen und den Autor benennen.
Martijn Pieters
Leider funktioniert das nicht in Jenkins DSL, kann die Datei mit den Eigenschaften nicht finden, aber diese Datei ist der gleiche Ordner ...FATAL: test.properties (No such file or directory) java.io.FileNotFoundException: test.properties (No such file or directory)
rafal1337
@ rafal1337 Haben Sie versucht, einen teilweisen / vollständigen Dateipfad zu verwenden?
user7294900
@ user7294900 Ja, ich habe mehrere Pfade versucht, aber ohne positiven Effekt.
Rafal1337
@ Rafal1337 versuchen Sie es mit readFile jenkins.io/doc/pipeline/steps/workflow-basic-steps
user7294900
2

Erstellen Sie eine groovige Datei und definieren Sie einige allgemeine Informationen und deren Verwendung load.

ZB hallo.conf (geschrieben von groovy)

build_name = 'hello'

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

Und benutze es von load

load 'hello.conf'

println(build_name)
for (job in build_config['build_job']) {
    build job: job
}
Chan Lee
quelle
sieht gut aus, aber im DSL-Plugin in Jenkins funktioniert es nicht: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

Wenn Sie eine Jenkins-spezifische Antwort wünschen: Es gibt ein Config File Provider Plugin für Jenkins.

Sie können Konfigurations- / Eigenschaftendateien über verwaltete Dateien speichern. Gehen Sie zu Jenkins verwalten> Verwaltete Dateien und erstellen Sie eine neue Datei. Es unterstützt .groovy, .json, .xml und viele andere.

Sobald Sie dies haben, können Sie diese Datei in einen Job laden, indem Sie das Kontrollkästchen Konfigurationsdatei bereitstellen verwenden, mit dem die Datei automatisch in eine env-Variable geladen wird.

Kaus Untwale
quelle