Jenkins-Groovy関数にパラメーターを渡す

Aug 21 2020

運が悪ければ、パイプライン内のパラメーターを使用して別のGroovy関数を呼び出そうとしています。
パラメータを渡すGroovy関数はbashスクリプトで構成されていますが、このbashスクリプトは、渡すパラメータを認識しません。ただし、iによって渡されたパラメーターがparameters {}パイプラインでaとして定義されている場合は機能しますが、これは望ましくありません。

問題:
シェルスクリプトが引数を認識/理解していない、変数が空である、値がない。

pipeJenkins.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-環境

私はそこに同様の問題があることを知っています:

  • groovy変数をシェルスクリプトに渡す
  • groovy変数をシェル変数に割り当てる方法
  • Jenkinsパラメータ

注:これは、質問されたシェルパラメータ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.VARENV1env.VARENV2は、ここで使用した環境変数ですscript{}。それらに値を割り当てることができます。

これは私の新しい出力です:

それがお役に立てば幸いです。

LOOPを使用するための更新

シェルスクリプトのforループにトリプル一重引用符を使用し、それに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()
        }
      }
    }
}

出力: