我需要使用必须在运行时定义的变量来动态设置选项锁。 锁必须引用只能在运行时评估的资源名称(从文件系统读取json属性)。 我尝试了一切都没有成功,有人能给我提些建议吗? 这是一个示例代码:
import groovy.transform.Field
def TEST_VAR1 = "1"
@Field def TEST_VAR2 = "2"
GLB_TEST_VAR3 = "3"
def JQTOOLS = "jnks-jq-1.6"
pipeline {
agent any
environment{ ENV_VAR1 = tool(name:"jnks-jq-1.6") }
options { lock(resource:"LK_1_${JQTOOLS}_${TEST_VAR1}_${TEST_VAR2}_${GLB_TEST_VAR3}_${env.ENV_VAR1}") }
stages {
stage("S1") {
steps {
script{
echo "s1"
echo "${JQTOOLS}"
TEST_VAR1 = "a"
TEST_VAR2 = "b"
GLB_TEST_VAR3 = "c"
env.NEW_VAR1 = "z"
}
}
}
stage("Nested"){
environment{ ENV_VAR2=tool(name:"jnks-jq-1.6") }
options{ lock(resource:"LK_2_${JQTOOLS}_${TEST_VAR1}_${TEST_VAR2}_${GLB_TEST_VAR3}_${env.ENV_VAR1}#${env.NEW_VAR1}") }
stages {
stage("N1"){
steps{
echo "N1"
echo "${JQTOOLS}"
echo "${TEST_VAR1}"
echo "${TEST_VAR2}"
echo "${GLB_TEST_VAR3}"
echo "${env.NEW_VAR1}"
}
}
}
}
}
}
这是管道日志:
Trying to acquire lock on [LK_1_jnks-jq-1.6_1_2_3_null]
Resource [LK_1_jnks-jq-1.6_1_2_3_null] did not exist. Created.
Lock acquired on [LK_1_jnks-jq-1.6_1_2_3_null]
[Pipeline] {
[Pipeline] stage
[Pipeline] { (S1)
[Pipeline] script
[Pipeline] {
[Pipeline] echo
s1
[Pipeline] echo
jnks-jq-1.6
Trying to acquire lock on **[LK_2_jnks-jq-1.6_1_2_3_null#null]**
Resource [LK_2_jnks-jq-1.6_1_2_3_null#null] did not exist. Created.
Lock acquired on [LK_2_jnks-jq-1.6_1_2_3_null#null]
[Pipeline] {
[Pipeline] tool
[jnks-jq-1.6] $ sh -e /var/lib/jenkins/tools/com.cloudbees.jenkins.plugins.customtools.CustomTool/jnks-jq-1.6/hudson7478700574940555782.sh
[Pipeline] withEnv
[Pipeline] {
[Pipeline] stage
[Pipeline] { (N1)
[Pipeline] echo
N1
[Pipeline] echo
jnks-jq-1.6
[Pipeline] echo
a
[Pipeline] echo
b
[Pipeline] echo
c
[Pipeline] echo
z
预期结果是正确评估变量...类似: LK_2_jnks-jq-1.6_a_b_c_jnks-jq-1.6#z
预先感谢