Ran the sample pipeline script below it outputs---> cat one 2, cat two 3, cat three 4. Instead wanted it to output cat one 2, dog two 3, horse three 4. Tried few other options to get the expected output but its printing one letter at a time.
pipeline {
agent any
parameters {
text(name: 'NUMBER_TEXT', defaultValue: 'One 2\nTwo 3\nThree 4\n', description: '')
string(name: 'ANIMAL_TEXT', defaultValue: 'cat dog horse', description: '')
}
stages {
stage("Environnement variables") {
steps {
script{
def numbers="${params.NUMBER_TEXT}".split("\r?\n")
def animals="${params.ANIMAL_TEXT}".split(" ")
for (animal in animals) {
for (number in numbers) {
echo "**VM2** $animal"
echo "**VM** $number"
}
}
}
}
}
}
}
OUTPUT
13:14:28 [Pipeline] echo
13:14:28 **VM2** cat
13:14:28 [Pipeline] echo
13:14:28 **VM** One 2
13:14:28 [Pipeline] echo
13:14:28 **VM2** cat
13:14:28 [Pipeline] echo
13:14:28 **VM** Two 3
13:14:28 [Pipeline] echo
13:14:28 **VM2** cat
13:14:28 [Pipeline] echo
13:14:28 **VM** Three 4
13:14:28 [Pipeline] echo
13:14:28 **VM2** dog
13:14:28 [Pipeline] echo
13:14:28 **VM** One 2
13:14:28 [Pipeline] echo
13:14:28 **VM2** dog
13:14:28 [Pipeline] echo
13:14:28 **VM** Two 3
13:14:28 [Pipeline] echo
13:14:28 **VM2** dog
13:14:28 [Pipeline] echo
13:14:28 **VM** Three 4
13:14:28 [Pipeline] echo
13:14:28 **VM2** horse
13:14:28 [Pipeline] echo
13:14:28 **VM** One 2
13:14:28 [Pipeline] echo
13:14:28 **VM2** horse
13:14:28 [Pipeline] echo
13:14:28 **VM** Two 3
13:14:28 [Pipeline] echo
13:14:28 **VM2** horse
13:14:28 [Pipeline] echo
13:14:28 **VM** Three 4
13:14:28 [Pipeline] }
13:14:28 [Pipeline] // script
13:14:28 [Pipeline] }
13:14:28 [Pipeline] // stage
13:14:28 [Pipeline] }
13:14:28 [Pipeline] // node
13:14:28 [Pipeline] End of Pipeline
13:14:28 Finished: SUCCESS
Expecting cat one 2, dog two 3, horse three 4
It seems that instead of nested loops you want to loop over zipped animals and numbers.
[animals, numbers].transpose().each { animal, number ->
echo "**VM2** $animal"
echo "**VM** $number"
}