jenkins - 带有变量的 Jenkins 声明性管道锁名称
问题描述
我有一个带有锁的声明性 Jenkins 管道,例如
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 参数时,它设置正确。
这个对一个有点相关的问题的回答暗示了使用懒惰评估的 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,这个阶段只能并行运行管道的一个分支。
我该如何解决这个问题?
解决方案
推荐阅读
- vue.js - 带有 PWA 预设和宅基地的 Vue CLI 无法离线工作
- node.js - npm 包“5paisajs”的登录 api 不起作用
- swift - 用 Swift 开发一个 Audiounit
- android - 如何使recyclerview滚动条始终可见?
- java - 从不同的mysql数据库读取并在spring批处理中写入常见的mysql数据库
- mongodb - “mongo”工作但“mongod”不工作[MacOS][Mongo]
- firebase - 通过匹配数据集的最后一个字符查询找到数据集
- translation - (功能请求)适用于 Linux、chrome、Firefox 和 macOS 的 Microsoft 翻译
- git - 强制推送后的git远程历史记录
- angular - 在 HTML angular 中调用函数的更好方法