使用错误变量的Jenkins并行循环脚本

使用错误变量的Jenkins并行循环脚本,jenkins,groovy,Jenkins,Groovy,我正在尝试构建一组并行运行的动态步骤。下面的例子就是我想到的(并找到了at的例子)。但是我很难让它使用预期的变量。结果似乎总是来自循环最后一次迭代的变量 在以下示例中,两个测试的回波输出总是bdir2: pipeline { agent any stages { stage('Test') { steps { script { def tests = [:] def files files

我正在尝试构建一组并行运行的动态步骤。下面的例子就是我想到的(并找到了at的例子)。但是我很难让它使用预期的变量。结果似乎总是来自循环最后一次迭代的变量

在以下示例中,两个测试的回波输出总是
bdir2

pipeline {
  agent any

  stages {
    stage('Test') {
      steps {
        script {
          def tests = [:]
          def files

          files = ['adir1/adir2/adir3','bdir1/bdir2/bdir3']

          files.each { f ->
            rolePath = new File(f).getParentFile()
            roleName = rolePath.toString().split('/')[1]

            tests[roleName] = {
              echo roleName
            }
          }

          parallel tests
        }
      }
    }
  }
}

我希望其中一个测试输出
adir2
,另一个测试输出
bdir2
。我在这里遗漏了什么?

只要试着将测试部分移得更高一点,就可以了

pipeline {
  agent any
  stages {
    stage('Test') {
      steps {
        script {
          def tests = [:]
          def files

          files = ['adir1/adir2/adir3','bdir1/bdir2/bdir3']

          files.each { f ->
            tests[f] = {
             rolePath = new File(f).getParentFile()
             roleName = rolePath.toString().split('/')[1]
             echo roleName
            }
          }
          parallel tests
        }
      }
    }
  }
}

只要试着把测试部分移得更高一点,就可以了

pipeline {
  agent any
  stages {
    stage('Test') {
      steps {
        script {
          def tests = [:]
          def files

          files = ['adir1/adir2/adir3','bdir1/bdir2/bdir3']

          files.each { f ->
            tests[f] = {
             rolePath = new File(f).getParentFile()
             roleName = rolePath.toString().split('/')[1]
             echo roleName
            }
          }
          parallel tests
        }
      }
    }
  }
}

这很有效。我想对
tests
数组键和测试本身使用
roleName
,这意味着我需要在块的内部和外部指定它。不是很枯燥,但我现在可以看到评估是如何进行的。这是有效的。我想对
tests
数组键和测试本身使用
roleName
,这意味着我需要在块的内部和外部指定它。不是很枯燥,但我现在可以看到评估是如何进行的。