Jenkinsfile变量用于两个独立的阶段

时间:2017-02-03 16:08:03

标签: jenkins groovy jenkins-pipeline

我有一个管道作业,它使用两个独立的节点(一个用于构建,一个用于测试),我想在我的Jenkinsfile中的两个代码块之间共享一个变量。我认为这是可能的,但我对groovy和Jenkinsfile概念很新。以下是目前的相关代码:

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'
       }
}

我想在构建阶段分配“rev”变量,但是然后将它连接到Test阶段的SDK_VERSION变量。我的错误是:

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

2 个答案:

答案 0 :(得分:11)

只需在node块之前定义变量:

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

答案 1 :(得分:0)

在声明性管道中,@ mkobit的答案无效。但是,您可以明确切换到脚本模式并使用其作用域,例如像这样:

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

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