web-dev-qa-db-ja.com

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

              """

         }

     }



  } 
  }

エラー:groovy.lang.MissingPropertyException:そのようなプロパティはありません:クラスのbrf:groovy.lang.Binding

Jenkins宣言型パイプラインenv変数を使用する簡単な方法は何ですか?

7

以下のアクセスステージでは、前のブロックで設定された環境変数を使用できません。

エラーをよく見ると、Jenkinsがenv.cityではなくbrfに実際にアクセスできないことがわかります。

ここでの問題は、Jenkinsがshブロック内の$varを解釈する方法が原因です。

  • "double quotes"を使用すると、$varsh "... $var ..."はJenkins変数として解釈されます。
  • 'single quotes'を使用する場合、$varsh '... $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
19
honorius