webentwicklung-frage-antwort-db.com.de

Jenkinsfile-Variable, die in zwei separaten Stufen verwendet wird

Ich habe einen Pipeline-Job, der zwei separate Knoten verwendet (einen für Build, einen für Test), und ich möchte eine Variable zwischen zwei dieser Codeblöcke in meiner Jenkinsfile freigeben. Ich gehe davon aus, dass es möglich ist, aber ich bin sehr neu im Groovy und dem Jenkinsfile-Konzept. Hier ist der relevante Code bisher:

node('build') {
    stage('Checkout') {
        checkout scm
    }
    stage('Build') {
        bat(script: 'build')
        def rev = readFile('result')
    }
}

node('test') {
    stage('Test') {
            def SDK_VERSION = "5.0.0001.${rev}"
            bat "test.cmd ${env.BUILD_URL} ${SDK_VERSION}"
            archiveArtifacts artifacts: 'artifacts/**/*.xml'
            junit 'artifacts/**/*.xml'
       }
}

Ich möchte die "rev" -Variable in der Erstellungsphase zuweisen, sie aber dann in der Testphase mit der SDK_VERSION-Variablen verketten. Mein Fehler ist: 

groovy.lang.MissingPropertyException: No such property: rev for class: groovy.lang.Binding
10
user3270760

Definieren Sie einfach die Variable vor Ihrem node-Block:

def rev = ''
node('build') {
  stage('Checkout') {
    checkout scm
  }
  stage('Build') {
    bat(script: 'build')
    rev = readFile('result')
  }
}
11
mkobit

In einer deklarativen Pipeline funktioniert die Antwort von @ mkobit nicht. Sie können jedoch explizit in den Skriptmodus wechseln und dessen Umfang verwenden, z. wie so:

...
steps {
   script {
       def foo = sh script: "computeFoo", returnStdout: true

       node('name') {
           script {
               someStep()
           }
       }
    }
}
...
0
Raphael