Search code examples
groovyjenkins-pipeline

Groovy - Is it possible to only get same index values from jenkins parameters, index 1 to index 1 index 2 to index 2 etc?


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


Solution

  • 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"
    }