web-dev-qa-db-fra.com

Comment passer des variables entre les étapes d'un pipeline déclaratif Jenkins?

Comment passer des variables entre les étapes d'un pipeline déclaratif?

Dans un pipeline scripté, je suppose que la procédure consiste à écrire dans un fichier temporaire, puis à lire le fichier dans une variable.

Comment puis-je faire cela dans un pipeline déclaratif?

Par exemple. Je souhaite déclencher la création d'un travail différent, basé sur une variable créée par une action du shell.

stage("stage 1") {
    steps {
        sh "do_something > var.txt"
        // I want to get var.txt into VAR
    }
}
stage("stage 2") {
    steps {
        build job: "job2", parameters[string(name: "var", value: "${VAR})]
    }
}
60
John

Si vous souhaitez utiliser un fichier (étant donné qu'un script génère la valeur dont vous avez besoin), vous pouvez utiliser readFile comme indiqué ci-dessous. Sinon, utilisez sh avec l'option script comme indiqué ci-dessous:

// Define a groovy global variable, myVar.
// A local, def myVar = 'initial_value', didn't work for me.
// Your mileage may vary.
// Defining the variable here maybe adds a bit of clarity,
// showing that it is intended to be used across multiple stages.
myVar = 'initial_value'

pipeline {
  agent { label 'docker' }
  stages {
    stage('one') {
      steps {
        echo "${myVar}" // prints 'initial_value'
        sh 'echo hotness > myfile.txt'
        script {
          // OPTION 1: set variable by reading from file.
          // FYI, trim removes leading and trailing whitespace from the string
          myVar = readFile('myfile.txt').trim()

          // OPTION 2: set variable by grabbing output from script
          myVar = sh(script: 'echo hotness', returnStdout: true).trim()
        }
        echo "${myVar}" // prints 'hotness'
      }
    }
    stage('two') {
      steps {
        echo "${myVar}" // prints 'hotness'
      }
    }
    // this stage is skipped due to the when expression, so nothing is printed
    stage('three') {
      when {
        expression { myVar != 'hotness' }
      }
      steps {
        echo "three: ${myVar}"
      }
    }
  }
}
67
burnettk

Simplement:

  pipeline {
        parameters {
            string(name: 'custom_var', defaultValue: '')
        }

        stage("make param global") {
             steps {
               tmp_param =  sh (script: 'most amazing Shell command', returnStdout: true).trim()
               env.custom_var = tmp_param
              }
        }
        stage("test if param was saved") {
            steps {
              echo "${env.custom_var}"
            }
        }
  }
10
Zigzauer