0

내 선언적인 젠킨스 파이프 라인 코드의 한 단계에서 bash 스크립트 (sh '''./a.sh''', 스크립트 "a.sh"가 유지됩니다.)가 실행됩니다. 그 스크립트에서 "jarVersion"의 값은 $ {WORKSPACE} /. jarVersion (echo "jarVersion=${jarVersion}" > ${WORKSPACE}/.jarVersion)에 삽입됩니다. 나중 단계에서 jarVersion 값을 가져와야합니다. 값을 얻으려면 load "${WORKSPACE}/.jarVersion"${jarVersion}을 사용합니다. 우리가 파이프 라인 스크립트에서 그렇게 할 때 작동합니다.Jenkins 파이프 라인에서 env 변수를 성공적으로로드했지만 파이프 라인이 공유 라이브러리로 사용되지 않는 경우

그러나이 파이프 라인을 공유 라이브러리 (/vars/testSuite.groovy에 넣음)로 설정하고 다른 파이프 라인 스크립트에서 호출 할 때. var ${jarVersion}을 인식 할 수 없습니다.

문제를 해결하는 방법을 알려주십시오. 일반적인 질문은 A 단계에서 B 단계로 스크립트의 값을 전송하는 방법입니다.

stage('getJarVersion'){ 
     steps{ 
      script{ 
       load "${WORKSPACE}/.jarVersion" 
       currentBuild.description = "jarVersion:${jarVersion}" 
      } 
     } 
    } 

가 나는 파이프 라인 스크립트에서와 같이 작동 할 수 예상.

하지만 보여줍니다 같은 그루비 파일 아래의 단계로

groovy.lang.MissingPropertyException: No such property: jarVersion for class: testSuite 
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53) 
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.getProperty(ScriptBytecodeAdapter.java:458) 
    at com.cloudbees.groovy.cps.sandbox.DefaultInvoker.getProperty(DefaultInvoker.java:34) 
    at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:20) 
    at testSuite.call(/jenkins/jobs/TestSuite1/builds/11/libs/pipelineUtilities/vars/testSuite.groovy:84) 

답변

0

, 당신은 무대 블록에서 그리고 노드 블록 전에 객체를 선언해야합니다. 각 단계에 대한 그래서, 당신은 변수 안에 값을 정의 할 수 있습니다

Pipeline { 

def my_var 

stage('stage1'){ 
--------- 
} 

stage('stage2'){ 
--------- 
} 

} 

당신은 파일 당 단계를 정의하는 경우, 당신은 입력 오브젝트와 클로저를 만들 필요가 부모로부터 호출을 전달하는 그루비 파일 :

test.groovy :

def call(def my_obj, String my_string) { 


    stage('my_stage') { 
    println(my_obj) 
    } 
} 

parent_test.groovy

test(obj_value,string_value)