У меня есть конвейер Jenkins, который состоит из:
parameters.groovy
static Map<String, String> doMapping() {
[
'a-b-c': '1-2-3',
'd-e-f': '4-5-6',
'g-h-i': '7-8-9'
]
}
return this
Jenkinsfile
Map<String, String> myMap = null
...
pipeline {
parameters {
string(name: 'param1')
}
stages {
stage('Stage 1', {
...
steps {
script {
myMap = load('parameters.groovy').doMapping()
}
}
}
stage('Stage 2', {
...
steps {
script {
String p = ""
String v = ""
if (params.PARAM1?.trim()) {
p = params.PARAM1
v = myMap.get(p)
if (v == null) { // Set v to p if not found in the map
v = p
}
echo "v = ${v}"
v = myMap.get('d-e-f')
if (v == null) {
v = p
}
echo "v = ${v}"
}
}
}
}
}
}
Ввод:
param1 = d-e-f
Вывод:
[Pipeline] echo
v = d-e-f
[Pipeline] echo
v = 4-5-6
Почему запись карты не найдена, когда переменная используется в качестве ключа, и найдена, когда она жестко закодирована?
Я попытался проверить наличие пустых мест, но их не было, я проверил типы ключей карты, p, params.PARAM1 и v, и они являются java.lang.String.