it-swarm.com.de

Verwenden von env-Variablen, um andere Variablen in der Jenkins-Pipeline als Code festzulegen

Ich kann keine Umgebungsvariablen verwenden, die in den vorherigen Blöcken in der folgenden Zugriffsphase festgelegt wurden.

pipeline{
agent any
stages{

      stage("set env variable"){

      steps{
           script{
             env.city = "Houston"
             }
          }
       } 
     }
     stage("access"){
     steps{
           sh """
              set brf = ${env.city}
              echo $brf

              """

         }

     }



  } 
  }

FEHLER: groovy.lang.MissingPropertyException: Keine solche Eigenschaft: brf für die Klasse: groovy.lang.Binding

Was ist eine einfachere Möglichkeit, deklarative Pipeline-Umgebungsvariablen von Jenkins zu verwenden?

7

Ich kann keine Umgebungsvariablen verwenden, die in den vorherigen Blöcken in der folgenden Zugriffsphase festgelegt wurden.

Wenn Sie sich den Fehler genau ansehen, können Sie feststellen, dass Jenkins tatsächlich nicht auf brf und nicht auf env.city Zugreifen kann.

Das Problem hier wird durch die Art und Weise verursacht, wie Jenkins $var Im sh -Block interpretiert:

  • wenn Sie "double quotes" verwenden, wird $var in sh "... $var ..." als Jenkins-Variable interpretiert.
  • wenn Sie 'single quotes' verwenden, wird $var in sh '... $var ...' als Shell-Variable interpretiert.

Da der sh Code in Ihrem Skript in "double quotes" Eingeschlossen ist, wird $brf Als Jenkins-Variable betrachtet, obwohl keine solche Variable definiert ist. Daher tritt der Fehler auf.

Um die Shell-Variable in einem Block mit doppelten Anführungszeichen zu verwenden, fügen Sie \ Vor $ Hinzu:

sh "echo \$var"

funktioniert genauso wie

sh 'echo $var'

Dies sollte Ihr Pipeline-Skript reparieren:

pipeline{
    agent any
    stages{
        stage("set env variable"){
            steps{
                script{
                    env.city = "Houston"
                }
            }
        }
        stage("access"){
            steps{
                sh """
                    brf=${env.city}
                    echo \$brf
                """
            }
        }
    }
}

Ausgabe aus der Pipeline:

[test] Running Shell script
+ brf=Houston
+ echo Houston
Houston
19
honorius