Jenkins-Groovy関数にパラメーターを渡す
運が悪ければ、パイプライン内のパラメーターを使用して別の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の複製に近いものです。
ありがとう。
回答
更新しました
を持たずに環境変数を使用するように回答を更新しました 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{}
。それらに値を割り当てることができます。
これは私の新しい出力です:

それがお役に立てば幸いです。
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()
}
}
}
}
出力:
