我有一个管道作业,它使用两个独立的节点(一个用于构建,一个用于测试),我想在我的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
答案 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()
}
}
}
}
...