Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-53032

Support dynamic definition of parallel running stages

    Details

    • Similar Issues:

      Description

      We often have the usecase that we need to define stages that we run in parallel during runtime.
      E.g.: we run a script to determine which application changed in a branch and want to run in parallel for each application stages like Build, Test, Check etc.

      It seems to be not supported currently. I couldn't find a way to realize it. I tried different variations of the syntax but couldn't make it work.

      Example of what I would like to do:

      pipeline {
      	agent none
      
      	stages {
      		stage('Discover Changed Applications') {
                             	agent any
      			steps {
      				script {
      					apps = ["app-one", "app-two"]
      					}		
      				}
      		}
      
      		stage('parallel') {
      			steps {
      				script {
      					pstages = [:]
      
      					for (int i = 0; i < apps.size(); i++) {
      						app = apps[i]
      
      						pstages[app] = {
      							stages {
      								stage('Build application ') {
      									agent { label 'build' }
      
      									steps{
      										sh 'echo build'
      									}
      								}
      								stage('Test application ') {
      									agent { label 'test' }
      
      									steps{
      										sh 'echo test'
      									}
      								}
      							}
      						}
      					}
      
      					parallel(pstages)
      				}
      			}
      		}
      	}
      }
      

        Attachments

          Activity

          Hide
          stodorov Steve Todorov added a comment - - edited

          I've answered a similar question at devops.stackexchange.com. I believe this is a bit overcomplicated and the Jenkins team should probably think of a way to simplify how dynamic stages (be they parallel or not) can be used in a declarative pipeline.

          Show
          stodorov Steve Todorov added a comment - - edited I've answered a similar question at devops.stackexchange.com . I believe this is a bit overcomplicated and the Jenkins team should probably think of a way to simplify how dynamic stages (be they parallel or not) can be used in a declarative pipeline.
          Hide
          gladiatorbobby Ugur OZCAN added a comment -

          Steve's solution looks like a workaround we need a similar solution but we dont want to create a pipeline with groovy script.

          Why this is not a use case reading from a Listmap and using those values in parallel stages? I bet this is a very useful feature and valid usecase which tousands can benefit from.

          For example we have a device list and we can keep it as simple  [[name: AA, id:123][name:BB , id:234], ....] So as a listmap and we want to use device list (ids) each in different parallel stages like:

           

          Show
          gladiatorbobby Ugur OZCAN added a comment - Steve's solution looks like a workaround we need a similar solution but we dont want to create a pipeline with groovy script. Why this is not a use case reading from a Listmap and using those values in parallel stages? I bet this is a very useful feature and valid usecase which tousands can benefit from. For example we have a device list and we can keep it as simple  [ [name: AA, id:123] ,  [name:BB , id:234] , ....] So as a listmap and we want to use device list (ids) each in different parallel stages like:  

            People

            • Assignee:
              Unassigned
              Reporter:
              fho Fabian Holler
            • Votes:
              6 Vote for this issue
              Watchers:
              8 Start watching this issue

              Dates

              • Created:
                Updated: