시간 초과에 대해 정의 된 Globals 변수가있는 jenkinsfile이 있습니다.
class Globals {
static String TEST_TIMEOUT = ""
}
공유 라이브러리의 함수를 사용하고 있습니다. 전역 변수를 사용하여 함수의 시간 제한을 설정하고 있습니다. Globals 변수를 정의하지 않는 다른 프로젝트에서 사용하는 공유 라이브러리이므로 함수 파일에 환경 변수를 정의하여 시간 초과에 대한 기본값으로 사용할 수 있습니다.
env.TESTS_TIME_OUT="10080"
그런 다음 함수에서 Globals 변수가 있는지 확인하고 기본값을 사용하지 않는 경우 값을 시간 초과로 사용하고 싶습니다.
if(Globals.TEST_TIMEOUT){
env.TESTS_TIME_OUT= "${Globals.TEST_TIMEOUT}"
}
timeout(time: "${env.TESTS_TIME_OUT}", unit: 'MINUTES') {
.
.
.
}
이전에 env 매개 변수에 대해 성공했지만 이번에는 오류가 발생합니다.
No such field found: field java.lang.Class TEST_TIMEOUT
이 문제를 해결하는 방법에 대한 아이디어가 있습니까? 또는 Globals 변수가 있는지 확인하는 다른 방법이 있습니까?
감사합니다
당신은 잡을 수 groovy.lang.MissingPropertyException
중 하나 경우에 Throw 될 Globals
하거나 Globals.TEST_TIMEOUT
존재하지 않습니다
try {
env.TESTS_TIME_OUT = Globals.TEST_TIMEOUT
}
catch( groovy.lang.MissingPropertyException e ) {
env.TESTS_TIME_OUT = "10080"
}
이 패턴을 일반 함수로 이동할 수도 있습니다.
def getPropOrDefault( Closure c, def defaultVal ) {
try {
return c()
}
catch( groovy.lang.MissingPropertyException e ) {
return defaultVal
}
}
... 다음과 같이 호출 할 수 있습니다.
env.TESTS_TIME_OUT = getPropOrDefault({ Globals.TEST_TIMEOUT }, '10080')
유사하게 다루고 싶은 다양한 글로벌이 많은 경우 유용 할 수 있습니다. 많은 try
/ catch
블록 을 작성하지 못하도록 보호 합니다.
클로저는 표현식 Globals.TEST_TIMEOUT
이 함수 호출 이전 이 아닌 try
/ catch
블록 내부에서 평가 되는지 확인하는 데 필요합니다 getPropOrDefault
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다