passage de variables entre des fichiers groovy


9

Je gère de nombreux emplois dans Jenkins par le plugin DSL. Ce plugin utilise des définitions .groovy, donc je pense que même si quelqu'un n'utilise pas Jenkins mais l'utilisation de groovy peut être utile.

En général, je veux créer un fichier supplémentaire, qui peut être un fichier groovy, JSON ou YAML, peu importe. Il est important de pouvoir connecter ce fichier à mon fichier .groovy.

Dans ce fichier, je définis des variables (plutôt que des chaînes), par exemple l'adresse IP ou d'autres choses, par exemple.

ip_gitlab: 1.2.3.4
default_user: admin

Dans mes fichiers groovy, je veux pouvoir utiliser ces variables.

Cette approche est possible dans groovy?


bien sûr, c'est possible. Par exemple, il y a groovy-lang.org/json.html .
smelm

S'il est possible de définir un chemin de classe supplémentaire dans le plugin DSL. puis placez-le dans le dossier que vous ajouterez aux fichiers groovy classpath comme class GLOBAL{ def a=111; def b=222; }. alors dans le code, vous devriez pouvoir y accéderGLOBAL.a
daggett

@daggett J'essayais comme vous l'avez écrit et j'ai toujours une erreur: 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' cette erreur se produit lors du traitement de votre classe GLOBAL
rafal1337

j'ai oublié . pour chaque variable définie, il devrait y avoir un staticpréfixe. class GLOBAL{ static def a=111; static def b=222; }. mais l'erreur que vous avez est étrange. pourriez-vous montrer la variable que vous avez déclarée et comment vous l'utilisez en dsl.
daggett

1. Ma configuration du dsl postimg.cc/TLHK5k6h 2. erreur pendant le traitement du dsl postimg.cc/21F37jDs
rafal1337

Réponses:


3

Je suggère d'utiliser un fichier de propriétés comme l'a écrit @JBaruch

ip_gitlab=1.2.3.4
default_user=admin

Et chargez-le

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

Ensuite, vous pouvez l'utiliser, obtenez ip par exemple:

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

2
Il s'agit d'une copie à attribution minimale de l'autre poste; vous voudriez au moins suivre les directives de référencement et nommer l'auteur.
Martijn Pieters

Malheureusement, cela ne fonctionne pas dans Jenkins DSL, je ne trouve pas le fichier avec les propriétés, mais ce fichier est le même dossier ...FATAL: test.properties (No such file or directory) java.io.FileNotFoundException: test.properties (No such file or directory)
rafal1337

@ rafal1337 Avez-vous essayé d'utiliser le chemin partiel / complet du fichier?
user7294900

@ user7294900 Oui, j'essayais plusieurs chemins mais sans effet positif.
rafal1337


2

Faire un fichier groovy et définir quelques informations générales et utilisation load.

Par exemple, hello.conf (écrit par groovy)

build_name = 'hello'

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

Et l'utiliser par load

load 'hello.conf'

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

semble bon, mais dans le plugin DSL dans Jenkins ne fonctionne pas: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 vous voulez une réponse spécifique à Jenkins: il existe un plugin de fournisseur de fichiers de configuration pour jenkins.

Vous pouvez stocker des fichiers de configuration / propriétés via des fichiers gérés. Accédez à Gérer Jenkins> Fichiers gérés et créez un nouveau fichier. Il prend en charge .groovy, .json, .xml et bien d'autres.

Une fois que vous avez cela, vous pouvez charger ledit fichier dans un travail en utilisant la case à cocher Fournir un fichier de configuration qui chargera automatiquement le fichier dans une variable env.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.