web-dev-qa-db-fra.com

Utilisation de variables env pour définir d'autres variables dans le pipeline Jenkins comme code

Je ne peux pas utiliser les variables d'environnement définies dans les blocs précédents dans l'étape d'accès ci-dessous.

pipeline{
agent any
stages{

      stage("set env variable"){

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

              """

         }

     }



  } 
  }

ERREUR: groovy.lang.MissingPropertyException: aucune propriété de ce type: brf pour la classe: groovy.lang.Binding

Comment utiliser plus facilement les variables env du pipeline déclaratif jenkins?

7
Varunkumar Manohar

Je ne peux pas utiliser les variables d'environnement définies dans les blocs précédents dans l'étape d'accès ci-dessous.

Si vous regardez attentivement l'erreur, vous pouvez voir que Jenkins n'est pas en mesure d'accéder à brf, pas à env.city.

Le problème ici est dû à la façon dont Jenkins interprète $var à l'intérieur sh bloc:

  • si tu utilises "double quotes", $var dans sh "... $var ..." sera interprété comme une variable Jenkins;
  • si tu utilises 'single quotes', $var dans sh '... $var ...' sera interprété comme variable Shell.

Étant donné que le code sh de votre script est entouré de "double quotes", $brf est considéré comme une variable Jenkins, alors qu'aucune variable de ce type n'est définie, l'erreur se produit donc.

Pour utiliser la variable Shell à l'intérieur d'un bloc entre guillemets, ajoutez \ avant $:

sh "echo \$var"

fonctionne de la même manière que

sh 'echo $var'

Cela devrait corriger votre script de pipeline:

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

Sortie du pipeline:

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