it-swarm.com.de

Wie übergebe ich Variablen zwischen Phasen in einer deklarativen Jenkins-Pipeline?

Wie übergebe ich Variablen zwischen Phasen in einer deklarativen Pipeline?

In einer skriptbasierten Pipeline besteht die Prozedur darin, in eine temporäre Datei zu schreiben und die Datei dann in eine Variable zu lesen.

Wie mache ich das in einer deklarativen Pipeline?

Z.B. Ich möchte einen Build eines anderen Jobs auslösen, der auf einer von einer Shell-Aktion erstellten Variablen basiert.

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

Wenn Sie eine Datei verwenden möchten (da ein Skript den Wert erzeugt, den Sie benötigen), können Sie readFile wie unten gezeigt verwenden. Wenn nicht, verwenden Sie sh mit der Option script wie folgt:

// 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

Einfach:

  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