Декларативный конвейер имеет некоторые ограничения, если речь идет о его синтаксисе.Вы видите эту ошибку, потому что в блоке environment
вы можете назначить только два типа выражений:
- строки (одинарные или двойные кавычки)
- значения возвращаются из вызовов функций
Однако вы должны знать, что переменные среды хранят только строковые значения, поэтому, если вы возвращаете массив (или любой другой тип из) из вызова функции, он будет автоматическипреобразован в представление toString()
.
pipeline {
agent any
environment {
MYPODS = getPods()
}
stages {
stage("Test") {
steps {
script {
println "My pods = ${env.MYPODS}"
}
}
}
}
}
def getPods() {
return ['pod1', 'pod2']
}
Вывод на консоль:
[Pipeline] node
[Pipeline] {
[Pipeline] withEnv
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Test)
[Pipeline] script (hide)
[Pipeline] {
[Pipeline] echo
<java.lang.String@ed6c7b35 value=[pod1, pod2] hash=-311657675>
[Pipeline] echo
MYPODS = [pod1, pod2]
[Pipeline] echo
Item: [
[Pipeline] echo
Item: p
[Pipeline] echo
Item: o
[Pipeline] echo
Item: d
[Pipeline] echo
Item: 1
[Pipeline] echo
Item: ,
[Pipeline] echo
Item:
[Pipeline] echo
Item: p
[Pipeline] echo
Item: o
[Pipeline] echo
Item: d
[Pipeline] echo
Item: 2
[Pipeline] echo
Item: ]
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
Решение
Если вы хотите сохранить список строковых значений, вы можете определитьэто как одна строка значений, разделенных символом ,
.В этом случае вы можете просто разбить его на список значений.Рассмотрим следующий пример:
pipeline {
agent any
environment {
MYPODS = 'pod1,pod2,pod3'
}
stages {
stage("Test") {
steps {
script {
MYPODS.tokenize(',').each {
println "Item: ${it}"
}
}
}
}
}
}
Вывод:
[Pipeline] node
[Pipeline] {
[Pipeline] withEnv
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Test)
[Pipeline] script
[Pipeline] {
[Pipeline] echo
Item: pod1
[Pipeline] echo
Item: pod2
[Pipeline] echo
Item: pod3
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS