przekazywanie zmiennych między plikami groovy

9

Zarządzam wieloma zadaniami w Jenkins przez wtyczkę DSL. Ta wtyczka używa definicji .groovy, więc myślę, że nawet jeśli ktoś nie używa Jenkinsa, ale używa groovy, może ci pomóc.

Zasadniczo chcę utworzyć dodatkowy plik, którym może być plik groovy, JSON lub YAML, cokolwiek. Ważna jest możliwość połączenia tego pliku z moim plikiem .groovy.

W tym pliku definiuję zmienne (raczej tylko ciągi znaków), na przykład adres IP lub inne rzeczy, np.

ip_gitlab: 1.2.3.4
default_user: admin

W moich groovy plikach chcę móc korzystać z tych zmiennych.

To podejście jest możliwe w groovy?

rafal1337
źródło
oczywiście, że jest to możliwe. Na przykład istnieje groovy-lang.org/json.html .
smelm
Jeśli możliwe jest zdefiniowanie dodatkowej ścieżki klas we wtyczce DSL. następnie umieść w folderze, który dodasz do plików klasy groovy, takich jak class GLOBAL{ def a=111; def b=222; }. wtedy w kodzie powinieneś mieć do niego dostępGLOBAL.a
daggett
@daggett Próbowałem jak napisałeś i zawsze mam błąd: 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' Ten błąd występuje podczas przetwarzania twojej klasy GLOBAL
rafal1337
zapomniałem . dla każdej zdefiniowanej zmiennej powinien być staticprefiks. class GLOBAL{ static def a=111; static def b=222; }. ale twój błąd jest dziwny. czy możesz pokazać zadeklarowaną zmienną i sposób jej użycia w dsl.
daggett,
1. Moja konfiguracja dsl postimg.cc/TLHK5k6h 2. błąd podczas przetwarzania dsl postimg.cc/21F37jDs
rafal1337

Odpowiedzi:

3

Sugeruję użycie pliku właściwości, jak napisał @JBaruch

ip_gitlab=1.2.3.4
default_user=admin

I załaduj to

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

Następnie możesz go użyć, na przykład uzyskać ip:

def ipPropertyName= 'ip_gitlab'
properties."$ipPropertyName"
użytkownik7294900
źródło
2
Jest to minimalnie przypisana kopia z drugiego postu; chcesz przynajmniej postępować zgodnie ze wskazówkami i podać autora.
Martijn Pieters
Niestety, to nie działa w Jenkins DSL, nie można znaleźć pliku z właściwościami, ale ten plik to ten sam folder ...FATAL: test.properties (No such file or directory) java.io.FileNotFoundException: test.properties (No such file or directory)
rafal1337,
@ rafal1337 Czy próbowałeś użyć częściowej / pełnej ścieżki do pliku?
user7294900,
@ user7294900 Tak, próbowałem wielu ścieżek, ale bez pozytywnego efektu.
rafal1337
@ rafal1337 spróbuj readFile jenkins.io/doc/pipeline/steps/workflow-basic-steps
user7294900
2

Stwórz plik groovy i zdefiniuj ogólne informacje i użyj load.

Np. Hello.conf (napisane przez groovy)

build_name = 'hello'

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

I użyj tego przez load

load 'hello.conf'

println(build_name)
for (job in build_config['build_job']) {
    build job: job
}
Chan Lee
źródło
wygląda dobrze, ale we wtyczce DSL w Jenkins nie działa: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

jeśli potrzebujesz konkretnej odpowiedzi Jenkins: Jenn ma wtyczkę Config File Provider .

Pliki konfiguracji / właściwości można przechowywać za pomocą plików zarządzanych. Przejdź do Zarządzaj Jenkins> Zarządzane pliki i utwórz nowy plik. Obsługuje pliki .groovy, .json, .xml i wiele innych.

Gdy już to zrobisz, możesz załadować ten plik do zadania za pomocą pola wyboru Zapewnij plik konfiguracji, który automatycznie załaduje plik do zmiennej env.

Kaus Untwale
źródło