2017-12-27 56 views
0

아래 액세스 단계에서 이전 블록에 설정된 환경 변수를 사용할 수 없습니다.env 변수를 사용하여 Jenkins 파이프 라인의 다른 변수를 코드로 설정

pipeline{ 
agent any 
stages{ 

     stage("set env variable"){ 

     steps{ 
      script{ 
      env.city = "Houston" 
      } 
      } 
     } 
    } 
    stage("access"){ 
    steps{ 
      sh """ 
       set brf = ${env.city} 
       echo $brf 

       """ 

     } 

    } 



    } 
    } 

ERROR: groovy.lang.MissingPropertyException: No such property: brf for class: groovy.lang.Binding

젠킨스 선언 파이프 라인 ENV 변수를 사용하는 쉬운 방법은 무엇입니까? 나는 이것이 당신이 요구 한 것을 생각

stage("access"){ 
    steps{ 
      sh "set brf = ${env.city}" 
      echo '$brf' 

     //or 
     sh "set brf = ${env.city} && echo $brf" 

     } 
} 

하지만 당신은 또 다른 의심이 있으면 알려 :

답변

2

I cannot use environment variables set in previous blocks in access stage below.

, 당신은 젠킨스가 brf하지 env.city에 액세스 할 수 실제로 수없는 볼 수 있습니다.

여기 방식으로 인해 발생되는 문제 젠킨스 해석 $var 블록 sh 내부 :

  • "double quotes", sh "... $var ..."에서 $var는 젠킨스 변수로 해석됩니다 사용하는 경우;
  • 'single quotes'을 사용하는 경우 sh '... $var ...'에서 $var을 셸 변수로 해석합니다. 스크립트에서 sh 코드는 "double quotes"에 싸여 있기 때문에 정의 된 같은 변수가없는 상태

$brf가하는 젠킨스 변수로 간주되고, 따라서 오류가 발생합니다.

pipeline{ 
    agent any 
    stages{ 
     stage("set env variable"){ 
      steps{ 
       script{ 
        env.city = "Houston" 
       } 
      } 
     } 
     stage("access"){ 
      steps{ 
       sh """ 
        brf=${env.city} 
        echo \$brf 
       """ 
      } 
     } 
    } 
} 
:

sh "echo \$var" 

이 파이프 라인 스크립트를 수정해야

sh 'echo $var' 

이 같은 방식으로 작동합니다 \$ 전에

추가를 두 번 인용 블록 내부 쉘 변수를 사용하려면

파이프 라인 출력 :

[test] Running shell script 
+ brf=Houston 
+ echo Houston 
Houston 
0

은이 코드를 사용하여 변수를 얻을 수 아무런 문제가 없어야합니다. 오류를 자세히 보면