gpt4 book ai didi

Jenkins 声明式管道锁名称与变量

转载 作者:行者123 更新时间:2023-12-01 12:10:12 26 4
gpt4 key购买 nike

我有一个带锁的声明性 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]]

因此,看起来该变量无法正确解析。

我要解决的问题是,创建一个在舞台上锁定的多分支管道。但是当锁有一个名字时,这个名字不依赖于分支名,在这个阶段只有一个管道分支可以并行运行。

我该如何解决这个问题?

最佳答案

您可以使用 lock作为 step而不是 option :

pipeline {
environment {
BRANCH = 'master'
}
agent any
stages{
stage('stage') {
steps {
lock("lock-${env.BRANCH}" as String) {
echo "${env.BRANCH}" as String
}
}
}
}
}

如内 steps变量 env.BRANCH设置,这应该工作。

另见 documentation for lock step .

关于Jenkins 声明式管道锁名称与变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52314709/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com