Jenkins-groovy 함수에 매개 변수 전달

Aug 21 2020

운없이 파이프 라인 내부에 매개 변수가있는 또 다른 멋진 함수를 호출하려고했습니다.
매개 변수를 전달하는 그루비 함수는 bash 스크립트로 구성되어 있지만이 bash 스크립트는 내가 전달하는 매개 변수를 인식하지 못합니다. 그러나 i가 전달한 매개 변수 parameters {}가 파이프 라인에서 a 로 정의 된 경우 작동하지만 원하지 않습니다.

문제 :
쉘 스크립트가 인수를 인식 / 이해하지 못하고 변수가 비어 있고 값이 없습니다.

pipelineJenkins.groovy

def call {
  pipeline {
    parameters { 
      string (name: VAR1, defaultValue: "Peace", description: '' }  <--- This works, but not beneficial
      string (name: VAR2, defaultValue: "Space", description: '' }  <--- This works, but not beneficial
    stages {
      stage ('Run script') {
        steps {
          groovyFunction("${VAR1}", "${VAR2}")
          groovyFunction("Peace", "Space") <--- WHAT I WANT
        }
      }
    }
  }
}

groovyFunction.groovy

def call(var1, var2) {
  sh 'echo MY values ${var1} and ${var2}'
  sh "echo MY values ${var1} and ${var2}" <-- Works using double quotes, this messes up sed and for-loops...
}

매개 변수가있는 파이프 라인의 출력 :

MY values Peace and Space

매개 변수없이 파이프 라인에서 출력 :

MY values and

environment{}운없이 이전 질문에서 제안한 키워드를 사용해 보았습니다 . Jenkins-환경

비슷한 문제가 있다는 것을 알고 있습니다.

  • 그루비 변수를 쉘 스크립트에 전달
  • 그루비 변수를 쉘 변수에 할당하는 방법
  • Jenkins 매개 변수

참고 : 이것은 내 요청 된 quesiton Shell 매개 변수 Jenkins 의 복제본에 가깝습니다.

감사.

답변

1 AdityaNair Aug 21 2020 at 10:41

업데이트 됨

환경 변수를 사용하지 않고 답변을 업데이트했습니다. environment {}

여기에서 사용한 것과 같은 환경 변수를 사용하십시오 (코드를 약간 리팩토링했습니다).

def callfunc() {
  sh 'echo MY values $VARENV1 and $VARENV2'
}

pipeline {
    agent { label 'agent_1' }
    stages {
      stage ('Run script') {
        steps {
            script {
                env.VARENV1 = "Peace"
                env.VARENV2 = "Space"
            }
            callfunc()
        }
      }
    }
}

env.VARENV1그리고 env.VARENV2내가 여기서 사용한 환경 변수 script{}입니다. 여기에 값을 할당 할 수 있습니다.

이것은 내 새로운 출력입니다.

정말 도움이 되었기를 바랍니다.

루프에 사용하기위한 업데이트

루프 용 쉘 스크립트에 삼중 작은 따옴표를 사용하고 grrovy 변수를 추가합니다.

def callfunc() {
  sh '''
  export s="key"
  echo $s for i in $VARENV1 
    do
      echo "Looping ... i is set to $i"
    done
    '''
}

pipeline {
    agent { label 'agent_1' }
    stages {
      stage ('Run script') {
        steps {
            script {
                env.VARENV1 = "Peace"
            }
            callfunc()
        }
      }
    }
}

산출: