如何动态提供Jenkins管道资源锁标签?

如何动态提供Jenkins管道资源锁标签?,jenkins,jenkins-pipeline,jenkins-groovy,Jenkins,Jenkins Pipeline,Jenkins Groovy,我试图弄清楚如何让Jenkins资源锁使用我根据作业参数和一些附加代码动态创建的锁标签 最主要的问题是,我有一个复杂的管道,包含多个串行和并行步骤,需要在单个资源锁下锁定。资源锁标签是动态的,这是一个棘手的部分。Jenkins resource lock plugin文档说可以在lock(){}块中放置多个阶段,但是现在似乎不再是这样了。我只能在lock(){}块中执行一个脚本,因此似乎必须将锁放在顶层stage的选项{}块中。将它放在选项{}块中的问题是,似乎无法从管道{}块中更改选项{}块中

我试图弄清楚如何让Jenkins资源锁使用我根据作业参数和一些附加代码动态创建的锁标签

最主要的问题是,我有一个复杂的管道,包含多个串行和并行步骤,需要在单个资源锁下锁定。资源锁标签是动态的,这是一个棘手的部分。Jenkins resource lock plugin文档说可以在lock(){}块中放置多个阶段,但是现在似乎不再是这样了。我只能在lock(){}块中执行一个脚本,因此似乎必须将锁放在顶层stage的选项{}块中。将它放在选项{}块中的问题是,似乎无法从管道{}块中更改选项{}块中使用的任何变量

例如:

lock_label = null

pipeline {
  agent {
    node {
      label 'ci-runner-bionic'
    }
  }
  stages {
    stage('Setup') {
      steps {
        script {
          lock_label = 'SOME_LOCK'
        }
      }
    }
    stage('World') {
      options {
        lock label: lock_label, resource: null, quantity: 2, variable: 'SERVERS'
      }
      stages {
        stage('Something') {
          steps {
            sh 'echo "SERVERS=$SERVERS"'
          }
        }
        stage('More things') {
          parallel {
            stage('Something 2') {
              steps {
                sh 'echo "SERVERS=$SERVERS"'
              }
            }
            stage('Something 3') {
              steps {
                sh 'echo "SERVERS=$SERVERS"'
              }
            }
          }
        }
      }
    }
  }
}
当这个管道实际运行时,lock()看到的锁标签是null,而不是“SOME_lock”。虽然可能在管道{}块之前有可能影响锁标签的代码,但问题是之前运行的代码无法访问管道{}块中定义的参数


我知道锁插件有一个HTTP接口。但是,这样做可能会泄漏锁,因为无法保证在存在某个总体Jenkins环境问题或崩溃时会执行post块。

目前无法将用户生成参数作为资源锁

这件事有点不对劲


目前,无法使用用户生成参数作为资源锁

这件事有点不对劲