그루비 파일 사이에 변수 전달


9

DSL 플러그인으로 Jenkins의 많은 작업을 관리하고 있습니다. 그 플러그인은 .groovy 정의를 사용하므로 누군가 Jenkins를 사용하지 않지만 groovy를 사용하는 것이 도움이 될 수 있다고 생각합니다.

일반적으로 그루비 파일, JSON 또는 YAML 등 추가 파일을 만들고 싶습니다. 해당 파일을 내 .groovy 파일과 연결할 수있는 가능성이 중요합니다.

이 파일에서 주소 IP 또는 다른 것들과 같은 변수 (문자열이 아닌)를 정의하고 있습니다.

ip_gitlab: 1.2.3.4
default_user: admin

내 groovy 파일에서 이러한 변수를 사용할 수 있기를 원합니다.

그 접근은 그루비에서 가능합니까?


물론 가능합니다. 예를 들어 groovy-lang.org/json.html이 있습니다.
smelm

DSL 플러그인에서 추가 클래스 경로를 정의 할 수있는 경우 그런 다음 클래스 경로 그루비 파일에 추가 할 폴더에 넣습니다 class GLOBAL{ def a=111; def b=222; }. 코드에서 액세스 할 수 있어야합니다GLOBAL.a
daggett

@ daggett 나는 당신이 쓰고있는 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' 동안 항상 오류가 발생했습니다 : 이 오류는 클래스 GLOBAL을 처리하는 동안 발생합니다
rafal1337

나는 잊었다. 정의 된 각 변수마다 static접두사 가 있어야합니다 . class GLOBAL{ static def a=111; static def b=222; }. 그러나 당신이 가진 오류는 이상합니다. 선언 한 변수와 dsl에서 어떻게 사용하는지 보여줄 수 있습니까?
daggett

1. DSL의 내 구성 postimg.cc/TLHK5k6h DSL 처리 중 2. 오류 postimg.cc/21F37jDs
rafal1337

답변:


3

@JBaruch가 쓴 것처럼 속성 파일 을 사용하는 것이 좋습니다.

ip_gitlab=1.2.3.4
default_user=admin

그리고 그것을로드

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

그런 다음 사용할 수 있습니다. 예를 들어 ip를 얻으십시오.

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

2
이것은 다른 게시물에서 최소한으로 분류 된 사본입니다. 최소한 참조 지침 을 따르고 저자의 이름을 지정하고 싶을 것 입니다.
Martijn Pieters

불행히도 젠킨스 DSL에서 작동하지 않습니다, 속성이있는 파일을 찾을 수 없지만이 파일은 같은 폴더입니다 ...FATAL: test.properties (No such file or directory) java.io.FileNotFoundException: test.properties (No such file or directory)
rafal1337

@ rafal1337 파일의 부분 / 전체 경로를 사용해 보셨습니까?
user7294900

@ user7294900 예, 여러 경로를 시도했지만 긍정적 인 효과는 없었습니다.
rafal1337


2

groovy 파일을 만들고 일반적인 정보를 정의하고 사용하십시오 load.

예 : hello.conf (groovy 작성)

build_name = 'hello'

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

그리고 그것을 사용 load

load 'hello.conf'

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

좋아 보이지만 Jenkins의 DSL 플러그인에서는 작동하지 않습니다.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

젠킨스 특정 답변을 원한다면 : 젠킨스에 구성 파일 공급자 플러그인 이 있습니다.

관리 파일을 통해 구성 / 특성 파일을 저장할 수 있습니다. Jenkins 관리> 관리되는 파일로 이동하여 새 파일을 작성하십시오. .groovy, .json, .xml 및 기타 여러 가지를 지원합니다.

그런 다음 파일을 env 변수에 자동으로로드하는 구성 파일 제공 확인란을 사용하여 작업 내에 해당 파일을로드 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.