以下のアクセスステージでは、前のブロックで設定された環境変数を使用できません。
pipeline{
agent any
stages{
stage("set env variable"){
steps{
script{
env.city = "Houston"
}
}
}
}
stage("access"){
steps{
sh """
set brf = ${env.city}
echo $brf
"""
}
}
}
}
エラー:groovy.lang.MissingPropertyException:そのようなプロパティはありません:クラスのbrf:groovy.lang.Binding
Jenkins宣言型パイプラインenv変数を使用する簡単な方法は何ですか?
以下のアクセスステージでは、前のブロックで設定された環境変数を使用できません。
エラーをよく見ると、Jenkinsがenv.city
ではなくbrf
に実際にアクセスできないことがわかります。
ここでの問題は、Jenkinsがsh
ブロック内の$var
を解釈する方法が原因です。
"double quotes"
を使用すると、$var
のsh "... $var ..."
はJenkins変数として解釈されます。'single quotes'
を使用する場合、$var
のsh '... $var ...'
はシェル変数として解釈されます。スクリプト内のsh
コードは"double quotes"
でラップされているため、$brf
はJenkins変数と見なされますが、そのような変数は定義されていないため、エラーが発生します。
二重引用符で囲まれたブロック内でシェル変数を使用するには、\
の前に$
を追加します。
sh "echo \$var"
と同じように動作します
sh 'echo $var'
これにより、パイプラインスクリプトが修正されます。
pipeline{
agent any
stages{
stage("set env variable"){
steps{
script{
env.city = "Houston"
}
}
}
stage("access"){
steps{
sh """
brf=${env.city}
echo \$brf
"""
}
}
}
}
パイプラインからの出力:
[test] Running Shell script
+ brf=Houston
+ echo Houston
Houston