[JIRA] (JENKINS-58236) Provide mechanism to define dynamic stages in declarative pipelines

2 views
Skip to first unread message

hendrik@halkow.com (JIRA)

unread,
Jun 27, 2019, 5:34:04 AM6/27/19
to jenkinsc...@googlegroups.com
Hendrik Halkow created an issue
 
Jenkins / Improvement JENKINS-58236
Provide mechanism to define dynamic stages in declarative pipelines
Issue Type: Improvement Improvement
Assignee: Andrew Bayer
Components: pipeline, pipeline-model-definition-plugin
Created: 2019-06-27 09:33
Priority: Major Major
Reporter: Hendrik Halkow

Hello, it would be great if we had a mechanism to define dynamic stages within declarative pipelines. The use case is that I want to create a pipeline function for micro service repositories. Each repository contains a number of container images that needs to be built in parallel. The only way I found is using the these pseudo stages wrapped by the `parallel` step:

pipeline {
  agent any
  stages {
    stage('build') {
      steps {
        runParallel items: ("a".."f").collect { "Stage ${it}" }
      }
    }
  }
}

def runParallel(args) {
  parallel args.items.collectEntries { name -> [ "${name}": {
    stage("${name}") {
      echo name
    }
  }]}
}

This is bad because the sub-stages can neither have an agent nor contain other sub-stages. And it requires a
On the other hand, this shouldn't make the declarative pipeline too scripty. A minimal scriptiness approach would look like this:

pipeline {
  agent none
  stages {
    stage('build') {
      stages {
        ("A".."F").collect {
          stage("Stage ${it}") {
            agent any
            steps {
              echo "Hello from stage ${it}!"
            }
          }
        }
      }
    }
  }
}
Add Comment Add Comment
 
This message was sent by Atlassian Jira (v7.11.2#711002-sha1:fdc329d)

hendrik@halkow.com (JIRA)

unread,
Jun 27, 2019, 5:38:02 AM6/27/19
to jenkinsc...@googlegroups.com
Hendrik Halkow updated an issue
Change By: Hendrik Halkow
Hello, it would be great if we had a mechanism to define dynamic stages within declarative pipelines. The use case is that I want to create a pipeline function for micro service repositories. Each repository contains a number of container images that needs to be built in parallel. The only way I found is using the these pseudo stages wrapped by the `parallel` step:

{code}

pipeline {
  agent any
  stages {
    stage('build') {
      steps {
        runParallel items: ("a".."f").collect { "Stage ${it}" }
      }
    }
  }
}

def runParallel(args) {
  parallel args.items.collectEntries { name -> [ "${name}": {
    stage("${name}") {
      echo name
    }
  }]}
}
{code}

This is bad because the sub-stages can neither have an agent nor contain other sub-stages. And it requires a
separate function (I couldn't get it working without).
On the other hand, this shouldn't make the declarative pipeline too scripty. A minimal scriptiness approach would look like this:

{code}

pipeline {
  agent none
  stages {
    stage('build') {
      stages {
        ("A".."F").collect {
          stage("Stage ${it}") {
            agent any
            steps {
              echo "Hello from stage ${it}!"
            }
          }
        }
      }
    }
  }
}
{code}

luckyhk.lee@samsung.com (JIRA)

unread,
Aug 30, 2019, 6:44:03 AM8/30/19
to jenkinsc...@googlegroups.com
Hokwang Lee commented on Improvement JENKINS-58236
 
Re: Provide mechanism to define dynamic stages in declarative pipelines

The number of Dockerfile is increasing more and more, so this feature is really needed and important to all users.

zionyx@gmail.com (JIRA)

unread,
Sep 29, 2019, 6:54:05 PM9/29/19
to jenkinsc...@googlegroups.com
KY Lee commented on Improvement JENKINS-58236

There is a way to achieve this. See this response: https://stackoverflow.com/a/51308400/795137

The way he described is to create these dynamic stages within script closure. Wrap it around in a parallel closure and it should get what you want.

This message was sent by Atlassian Jira (v7.13.6#713006-sha1:cc4451f)
Atlassian logo

hendrik@halkow.com (JIRA)

unread,
Sep 29, 2019, 8:51:02 PM9/29/19
to jenkinsc...@googlegroups.com

This is pretty much the same as my first example that I don't want because of the explained reasons.

Reply all
Reply to author
Forward
0 new messages