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