У меня есть декларативный трубопровод Дженкинса с замком, e. г.
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]
Кажется, что переменная окружения не установлена при оценке имени замка, но когда вычисляется аргумент 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]]
Итак, похоже, что переменная не может быть правильно разрешена.
Проблема, которую я хочу решить, заключается в создании многоотраслевого конвейера, который имеет блокировку на сцене. Но когда у блокировки есть имя, которое не зависит от имени ветви, на этом этапе параллельно может работать только одна ветвь конвейера.
Как мне это решить?