【发布时间】:2018-09-13 13:23:53
【问题描述】:
我有一个带有锁的声明性 Jenkins 流水线,例如。 g.
pipeline {
environment {
BRANCH = 'master'
}
agent any
stages{
stage('stage') {
options {
lock(resource: "lock-${env.BRANCH}")
}
steps {
echo "Something"
}
}
}
}
但是当我执行管道时,它会在日志中显示
[Pipeline] lock
Trying to acquire lock on [lock-null]
Lock acquired on [lock-null]
[Pipeline] {
[Pipeline] echo
master
[Pipeline] }
Lock released on resource [lock-null]
在评估 lock-name 时似乎没有设置环境变量,但是在评估 echo 参数时,它设置正确。
This answer 对一个有点相关的问题给出了使用延迟评估的 GString 而不是普通 GString 的提示。试试这个:
pipeline {
environment {
BRANCH = 'master'
}
agent any
stages{
stage('stage') {
options {
lock(resource: "lock-${->env.BRANCH}" as String)
}
steps {
echo "${->env.BRANCH}" as String
}
}
}
}
给我以下日志消息
[Pipeline] lock
Trying to acquire lock on [[no resource/label specified - probably a bug]]
Lock acquired on [[no resource/label specified - probably a bug]]
[Pipeline] {
[Pipeline] echo
master
[Pipeline] }
Lock released on resource [[no resource/label specified - probably a bug]]
所以,看起来变量无法正确解析。
我要解决的问题是,创建一个在舞台上有锁的多分支管道。但是当锁有名字时,不依赖于branchname,这个阶段只能并行运行管道的一个分支。
我该如何解决这个问题?
【问题讨论】:
-
我设法解决了这个问题:stackoverflow.com/questions/69521882/…