Sil*_*Nak 7 jenkins jenkins-pipeline
我有一个带锁的声明式詹金斯管道,例如
pipeline {
environment {
BRANCH = 'master'
}
agent any
stages{
stage('stage') {
options {
lock(resource: "lock-${env.BRANCH}")
}
steps {
echo "Something"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我执行管道时,日志中显示
[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]
Run Code Online (Sandbox Code Playgroud)
当评估 lock-name 时,环境变量似乎没有设置,但是当评估 echo 参数时,它被正确设置。
这个对一个有点相关的问题的答案给出了使用延迟评估的 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
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
给我以下日志消息
[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]]
Run Code Online (Sandbox Code Playgroud)
因此,看起来该变量无法正确解析。
我想解决的问题是,创建一个在舞台上有锁的多分支管道。但是当锁有一个不依赖于分支名称的名称时,该阶段只有一个管道分支可以并行运行。
我该如何解决这个问题?
您可以只使用lockasstep而不是 an option:
pipeline {
environment {
BRANCH = 'master'
}
agent any
stages{
stage('stage') {
steps {
lock("lock-${env.BRANCH}" as String) {
echo "${env.BRANCH}" as String
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
由于在steps变量中env.BRANCH已设置,这应该可以工作。
| 归档时间: |
|
| 查看次数: |
5242 次 |
| 最近记录: |