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

Jenkinsfile变量用于两个单独的阶段,jenkins,groovy,jenkins-pipeline,Jenkins,Groovy,Jenkins Pipeline,我有一个管道作业,它使用两个单独的节点(一个用于构建,一个用于测试),我想在我的Jenkinsfile中的两个代码块之间共享一个变量。我认为这是可能的,但我对groovy和Jenkinsfile概念非常陌生。以下是迄今为止的相关代码: 节点('build'){ 阶段(“签出”){ 校验scm } 阶段(‘构建’){ bat(脚本:“构建”) def rev=readFile('结果') } } 节点('测试'){ 阶段(“测试”){ def SDK_VERSION=“5.0.0001.${rev

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

节点('build'){
阶段(“签出”){
校验scm
}
阶段(‘构建’){
bat(脚本:“构建”)
def rev=readFile('结果')
}
}
节点('测试'){
阶段(“测试”){
def SDK_VERSION=“5.0.0001.${rev}”
bat“test.cmd${env.BUILD\u URL}${SDK\u VERSION}”
archiveArtifacts工件:“工件/***/.xml”
junit“artifacts/***.xml”
}
}
我想在构建阶段分配“rev”变量,然后在测试阶段将其连接到SDK_版本变量。我的错误是:

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

只需在
节点
块之前定义变量:

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

在声明性管道中,@mkobit的答案不起作用。但是,您可以显式切换到脚本模式并使用其作用域,例如:

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

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

我想您可以在
节点
外部使用
def rev=”“
定义
rev
块。然后它在全局上下文中,可以在
节点
块中使用。我想一定有办法使它全局化,但每次我查找它时,资源都指向设置全局环境变量。我还只是想确保我正确地使用它。非常感谢。