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

Allow sequential stages inside parallel in Declarative syntax

    • Pipeline - April 2018

      Currently with -JENKINS-41334-, we set one or more stages to be executed in parallel but no "branches". Meaning that we cannot parallelise a sequence of stages.

       

      Example:

      pipeline {
        agent none
        stages {
          stage('Parallel stuff') {
            parallel 'branch 1' : {
              // Sequencial stages
              stage('Branch 1 stage 1'){
                  agent any
                  steps {
                      echo "In branch 1 stage 1"
                  }
              }
              stage('Branch 1 stage 2'){
                  agent none // With that kind of sequencial stage, we can change the agent to run on
                  steps {
                      sleep 30
                  }
              }
            }, 'branch 2': { // Parallel execution
              stage('Branch 2 stage 1'){
                  agent any
                  steps {
                      echo "In branch 2 stage 1"
                      sleep 60
                  }
              }
            }
          }
        }
      }
      

      Blue ocean possible view:

          [JENKINS-46809] Allow sequential stages inside parallel in Declarative syntax

          Bastien Arata added a comment - - edited

          Great to hear that ! The syntax doesn't matter (mine is not even syntactically correct), I was just throwing an example to clarify myself. Any issues to watch in order to be aware of any progression on the subject ?

          Bastien Arata added a comment - - edited Great to hear that ! The syntax doesn't matter (mine is not even syntactically correct), I was just throwing an example to clarify myself. Any issues to watch in order to be aware of any progression on the subject ?

          Andrew Bayer added a comment -

          This one, I guess. =)

          Andrew Bayer added a comment - This one, I guess. =)

          Bastien Arata added a comment -

          Ok then =)

          Bastien Arata added a comment - Ok then =)

          Andrew Bayer added a comment - - edited

          Thinking about syntax here - some possibilities:

          First, I think this feels generally right for defining a "group" of stages to run sequentially:

          group('some-name') {
            stage('a') { ... }
            stage('b') { ... }
          }
          

          I'm open to something other than "group". The main thing is to have a name for the group - this ends up, behind the scenes, being the name of the parallel step branch the group's stages get executed within. I decided to go with group('some-name') rather than a nested name 'some-name' field because if we did the latter, we'd either have to add another nested stages or something like that for the individual stage definitions to be in, or we'd have the contents of group being either name ... or stage(...). I don't like mixing key/value pair fields in the same block as arbitrary-lists-of-things, so the latter doesn't work for me, and the former adds more verbosity than I think is really needed.

          Second is how we handle declaring parallel groups in a stage, and related, how we handle existing parallel stages. I've played around with having parallel be able to contain either a list of stage or a list of group - or even a mix. Neither approach (exclusively stage or group, or non-exclusive) feels very smooth in implementation, though the syntax is pretty nice, especially for the mixed approach. I've also considered a new section, let's call it parallelGroups for now, where you could either have parallel or parallelGroups on a stage but not both. Much easier implementation-wise, better backwards compatibility (most notably for the editor, which wouldn't have to change how it handles parallel at all, just add parallelGroups support and make sure only one of the two can be used), worse syntax.

          So here are the options as I see it:

          Exclusive lists in parallel

          stage('just-stages') {
            parallel {
              // Just stages in this case
              stage('a') { ... }
              stage('b') { ... }
              ...
            }
          }
          stage('just-groups') {
            parallel {
              // Just groups in this case - note that we still need a group for just one stage
             group('first-group') {
               stage('a) { ... }
             }
             group('second-group') {
               stage('b') { ... }
               stage('c') { ... }
            }
          }
          

          Mixed lists in parallel

          stage('mixed-list') {
            parallel {
              stage('a') { ... }
              group('b-and-c') {
                stage('b') { ... }
                stage('c') { ... }
              }
            }
          }
          

          parallel and parallelGroups

          stage('parallel-single-stages') {
            parallel {
              stage('a') { ... }
              stage('b') { ... }
            }
          }
          stage('parallelGroups') {
            parallelGroups {
              group('first-group') {
                stage('a') { ... }
              }
              group('second-group') {
                stage('b') { ... }
                stage('c') { ... }
              }
            }
          }
          

          Thoughts? (ping kshultz michaelneale rsandell jamesdumay stephendonner rpocase hrmpw)

          Andrew Bayer added a comment - - edited Thinking about syntax here - some possibilities: First, I think this feels generally right for defining a "group" of stages to run sequentially: group( 'some-name' ) { stage( 'a' ) { ... } stage( 'b' ) { ... } } I'm open to something other than "group". The main thing is to have a name for the group - this ends up, behind the scenes, being the name of the parallel step branch the group's stages get executed within. I decided to go with group('some-name') rather than a nested name 'some-name' field because if we did the latter, we'd either have to add another nested stages or something like that for the individual stage definitions to be in, or we'd have the contents of group being either name ... or stage(...) . I don't like mixing key/value pair fields in the same block as arbitrary-lists-of-things, so the latter doesn't work for me, and the former adds more verbosity than I think is really needed. Second is how we handle declaring parallel groups in a stage, and related, how we handle existing parallel stages. I've played around with having parallel be able to contain either a list of stage or a list of group - or even a mix. Neither approach (exclusively stage or group , or non-exclusive) feels very smooth in implementation, though the syntax is pretty nice, especially for the mixed approach. I've also considered a new section, let's call it parallelGroups for now, where you could either have parallel or parallelGroups on a stage but not both. Much easier implementation-wise, better backwards compatibility (most notably for the editor, which wouldn't have to change how it handles parallel at all, just add parallelGroups support and make sure only one of the two can be used), worse syntax. So here are the options as I see it: Exclusive lists in parallel stage( 'just-stages' ) { parallel { // Just stages in this case stage( 'a' ) { ... } stage( 'b' ) { ... } ... } } stage( 'just-groups' ) { parallel { // Just groups in this case - note that we still need a group for just one stage group( 'first-group' ) { stage('a) { ... } } group( 'second-group' ) { stage( 'b' ) { ... } stage( 'c' ) { ... } } } Mixed lists in parallel stage( 'mixed-list' ) { parallel { stage( 'a' ) { ... } group( 'b-and-c' ) { stage( 'b' ) { ... } stage( 'c' ) { ... } } } } parallel and parallelGroups stage( 'parallel-single-stages' ) { parallel { stage( 'a' ) { ... } stage( 'b' ) { ... } } } stage( 'parallelGroups' ) { parallelGroups { group( 'first-group' ) { stage( 'a' ) { ... } } group( 'second-group' ) { stage( 'b' ) { ... } stage( 'c' ) { ... } } } } Thoughts? (ping kshultz michaelneale rsandell jamesdumay stephendonner rpocase hrmpw )

          Patrick Wolf added a comment -

          At first blush I don't think parallelGroups adds anything since group is required anyway.

          Is there any real difference between:

          stage('just-groups') {
            parallel {
             group('first-group') {
               stage('a) { ... }
             }
             group('second-group') {
               stage('b') { ... }
               stage('c') { ... }
            }
          }
          

          and 

          stage('parallelGroups') {
            parallelGroups {
              group('first-group') {
                stage('a') { ... }
              }
              group('second-group') {
                stage('b') { ... }
                stage('c') { ... }
              }
            }
          }
          

          I kind of like the former because we would be adding to existing parallel instead of adding a new higher level declaration. An alternative to group might be stageGroup to be a little more descriptive.

           

          Patrick Wolf added a comment - At first blush I don't think parallelGroups adds anything since group is required anyway. Is there any real difference between: stage( 'just-groups' ) { parallel { group( 'first-group' ) { stage('a) { ... } } group( 'second-group' ) { stage( 'b' ) { ... } stage( 'c' ) { ... } } } and  stage( 'parallelGroups' ) { parallelGroups { group( 'first-group' ) { stage( 'a' ) { ... } } group( 'second-group' ) { stage( 'b' ) { ... } stage( 'c' ) { ... } } } } I kind of like the former because we would be adding to existing parallel instead of adding a new higher level declaration. An alternative to group might be stageGroup to be a little more descriptive.  

          Andrew Bayer added a comment -

          The idea of parallelGroups is that groups would need to be in that, while parallel would have only stages. It'd simplify parsing and JSON translation significantly over the other options.

          Andrew Bayer added a comment - The idea of parallelGroups is that groups would need to be in that, while parallel would have only stages. It'd simplify parsing and JSON translation significantly over the other options.

          Andrew Bayer added a comment -

          FYI, I'm leaning strongly towards the "Mixed list" approach right now...doing preliminary implementation work to make sure it's viable.

          Andrew Bayer added a comment - FYI, I'm leaning strongly towards the "Mixed list" approach right now...doing preliminary implementation work to make sure it's viable.

          Michael Neale added a comment -

          yeah I have trouble imagining it in mh mind - is it possible to have it as example/visual pairs? I think I understand, but my assumption may be wrong. 

          Michael Neale added a comment - yeah I have trouble imagining it in mh mind - is it possible to have it as example/visual pairs? I think I understand, but my assumption may be wrong. 

          Andrew Bayer added a comment -

          Not sure what you mean? The syntax examples are all above.

          Andrew Bayer added a comment - Not sure what you mean? The syntax examples are all above.

          Andrew Bayer added a comment -

          And if you're talking about what ends up being executed, it's the same either way - parallel branches with 1..N stages run sequentially inside them as specified.

          Andrew Bayer added a comment - And if you're talking about what ends up being executed, it's the same either way - parallel branches with 1..N stages run sequentially inside them as specified.

          Andrew Bayer added a comment -

          And to make sure everyone knows the direction I'm leaning, it's this:

          stage('mixed-list') {
            parallel {
              stage('a') { ... }
              group('b-and-c') {
                stage('b') { ... }
                stage('c') { ... }
              }
            }
          }
          

          (again, naming of group can definitely be changed, it's the overall syntax that matters)
          That'll run two parallel branches - one with Stage a, and the second with Stage b followed by Stage c.

          Andrew Bayer added a comment - And to make sure everyone knows the direction I'm leaning, it's this: stage( 'mixed-list' ) { parallel { stage( 'a' ) { ... } group( 'b-and-c' ) { stage( 'b' ) { ... } stage( 'c' ) { ... } } } } (again, naming of group can definitely be changed, it's the overall syntax that matters) That'll run two parallel branches - one with Stage a, and the second with Stage b followed by Stage c.

          Michael Neale added a comment -

          abayer oh right - they all result in the same visual... nevermind.. 

           

          Do the groups even need to be named? they aren't in the visual side of things right? 

          Michael Neale added a comment - abayer oh right - they all result in the same visual... nevermind..    Do the groups even need to be named? they aren't in the visual side of things right? 

          Andrew Bayer added a comment -

          Yeah, we need some identifier for them, since they end up in a parallel branch that needs a name. I suppose in theory we could try to auto-generate a name randomly, but I'd prefer requiring one be specified.

          Andrew Bayer added a comment - Yeah, we need some identifier for them, since they end up in a parallel branch that needs a name. I suppose in theory we could try to auto-generate a name randomly, but I'd prefer requiring one be specified.

          Andrew Bayer added a comment -

          Ok, preliminary work is up at https://github.com/jenkinsci/pipeline-model-definition-plugin/pull/227. I did go with the "mixed" parallel block contents (i.e., both stage and group can be in there), and since I've cracked that implementation, the other syntax options are kinda pointless, since the "mixed" one was superior in the first place (and backwards compatible!).

          This is very much a work in progress - I've got all of one test for this currently, and wouldn't be shocked if some existing tests get broken by the change. But hey, let's get the ball rolling.

          Andrew Bayer added a comment - Ok, preliminary work is up at https://github.com/jenkinsci/pipeline-model-definition-plugin/pull/227 . I did go with the "mixed" parallel block contents (i.e., both stage and group can be in there), and since I've cracked that implementation, the other syntax options are kinda pointless, since the "mixed" one was superior in the first place (and backwards compatible!). This is very much a work in progress - I've got all of one test for this currently, and wouldn't be shocked if some existing tests get broken by the change. But hey, let's get the ball rolling.

          Andrew Bayer added a comment -

          FYI, https://github.com/jenkinsci/pipeline-model-definition-plugin/pull/227 is probably the right place to discuss implementation details now - I've got a pile o' TODOs in the PR description, including a couple questions that need to be answered, along with a syntax example and a "diagram" of what this actually translates to at runtime.

          Andrew Bayer added a comment - FYI, https://github.com/jenkinsci/pipeline-model-definition-plugin/pull/227 is probably the right place to discuss implementation details now - I've got a pile o' TODOs in the PR description, including a couple questions that need to be answered, along with a syntax example and a "diagram" of what this actually translates to at runtime.

          My idea for the syntax. Sorry for crossposting.

          parallel {
            stages {
              stage('Build on Linux') {
                steps {
                  echo 'Building on Linux'
                }
              }
              stage('Test on Linux') {
                steps {
                  echo 'Testing on Linux'
                }
              }
            }
            stages {
              stage('Build on macOS') {
                steps {
                  echo 'Building on macOS'
                }
              }
              stage('Test on Linux') {
                steps {
                  echo 'Testing on macOS'
                }
              }
            }
          }

          Hendrik Halkow added a comment - My idea for the syntax. Sorry for crossposting. parallel { stages { stage( 'Build on Linux' ) { steps { echo 'Building on Linux' } } stage( 'Test on Linux' ) { steps { echo 'Testing on Linux' } } } stages { stage( 'Build on macOS' ) { steps { echo 'Building on macOS' } } stage( 'Test on Linux' ) { steps { echo 'Testing on macOS' } } } }

          I support above syntax. Groups already exist and are named "stages", no need to add extra block type.

          Adam Stankiewicz added a comment - I support above syntax. Groups already exist and are named "stages", no need to add extra block type.

          I can see this issue has been in status Review for a month now. Could I hope for some progress anytime soon?

          I am also curious if an "options { lock resource: '...' }" can be used on the new stage group. For now I have to stick with a "parallel" construct, which cannot solve all use cases.  

          Thomas Johansen added a comment - I can see this issue has been in status Review for a month now. Could I hope for some progress anytime soon? I am also curious if an "options { lock resource: '...' }" can be used on the new stage group. For now I have to stick with a "parallel" construct, which cannot solve all use cases.  

          Andrew Bayer added a comment -

          We’re waiting on Blue Ocean to add support for the visualization and in the editor. And yes, you’ll be able to do options on the parent of the sequential group.

          Andrew Bayer added a comment - We’re waiting on Blue Ocean to add support for the visualization and in the editor. And yes, you’ll be able to do options on the parent of the sequential group.

          Fantastic! Are there any issues I can watch for that?

          Thomas Johansen added a comment - Fantastic! Are there any issues I can watch for that?

          Andrew Bayer added a comment -

          No - I'll open one. =)

          Andrew Bayer added a comment - No - I'll open one. =)

          Andrew Bayer added a comment -

          And done - JENKINS-49050

          Andrew Bayer added a comment - And done - JENKINS-49050

          Michael Neale added a comment -

          Cool. 

           

          Yes I think there is visualising and also editing - they are the "hard" bits (mostly fiddly I expect)

          Michael Neale added a comment - Cool.    Yes I think there is visualising and also editing - they are the "hard" bits (mostly fiddly I expect)

          Code changed in jenkins
          User: Andrew Bayer
          Path:
          pipeline-model-api/src/main/java/org/jenkinsci/plugins/pipeline/modeldefinition/ast/ModelASTStage.java
          pipeline-model-api/src/main/resources/ast-schema.json
          pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/model/Stage.groovy
          pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/JSONParser.groovy
          pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/ModelParser.groovy
          pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/RuntimeASTTransformer.groovy
          pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/validator/ModelValidatorImpl.groovy
          pipeline-model-definition/src/main/resources/org/jenkinsci/plugins/pipeline/modeldefinition/Messages.properties
          pipeline-model-definition/src/main/resources/org/jenkinsci/plugins/pipeline/modeldefinition/ModelInterpreter.groovy
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/AbstractModelDefTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/AgentTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/BasicModelDefTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/DeclarativeUpgradeTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/EnvironmentTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/PostStageTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/ToolsTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/ValidatorTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/WhenStageTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/parser/ExecuteConvertedTest.java
          pipeline-model-definition/src/test/resources/agentOnGroup.groovy
          pipeline-model-definition/src/test/resources/environmentInGroup.groovy
          pipeline-model-definition/src/test/resources/errors/emptyStagesInGroup.groovy
          pipeline-model-definition/src/test/resources/errors/parallelStagesAndGroups.groovy
          pipeline-model-definition/src/test/resources/errors/parallelStagesGroupsDeepNesting.groovy
          pipeline-model-definition/src/test/resources/errors/parallelStagesStepsAndGroups.groovy
          pipeline-model-definition/src/test/resources/errors/parallelStepsAndGroups.groovy
          pipeline-model-definition/src/test/resources/errors/topLevelStageGroupsDeepNesting.groovy
          pipeline-model-definition/src/test/resources/json/agentOnGroup.json
          pipeline-model-definition/src/test/resources/json/errors/parallelStagesAndGroups.json
          pipeline-model-definition/src/test/resources/json/errors/parallelStagesGroupsDeepNesting.json
          pipeline-model-definition/src/test/resources/json/errors/parallelStagesStepsAndGroups.json
          pipeline-model-definition/src/test/resources/json/errors/parallelStepsAndGroups.json
          pipeline-model-definition/src/test/resources/json/errors/topLevelStageGroupsDeepNesting.json
          pipeline-model-definition/src/test/resources/json/parallelStagesGroupsAndStages.json
          pipeline-model-definition/src/test/resources/json/topLevelStageGroup.json
          pipeline-model-definition/src/test/resources/org/jenkinsci/plugins/pipeline/modeldefinition/DeclarativeUpgradeTest/parallelAddsGroupsExecutionModelActionUpgrade.zip
          pipeline-model-definition/src/test/resources/parallelStagesGroupsAndStages.groovy
          pipeline-model-definition/src/test/resources/postStage/groupLocalAll.groovy
          pipeline-model-definition/src/test/resources/postStage/postInParallelAndSequential.groovy
          pipeline-model-definition/src/test/resources/toolsInGroup.groovy
          pipeline-model-definition/src/test/resources/topLevelStageGroup.groovy
          pipeline-model-definition/src/test/resources/when/simpleGroupWhen.groovy
          pom.xml
          http://jenkins-ci.org/commit/pipeline-model-definition-plugin/e080af72f68c685bc32346bfd0e9fb87867eb4f6
          Log:
          [FIXED JENKINS-46809] Add sequential groups of parallel stages

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Andrew Bayer Path: pipeline-model-api/src/main/java/org/jenkinsci/plugins/pipeline/modeldefinition/ast/ModelASTStage.java pipeline-model-api/src/main/resources/ast-schema.json pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/model/Stage.groovy pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/JSONParser.groovy pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/ModelParser.groovy pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/RuntimeASTTransformer.groovy pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/validator/ModelValidatorImpl.groovy pipeline-model-definition/src/main/resources/org/jenkinsci/plugins/pipeline/modeldefinition/Messages.properties pipeline-model-definition/src/main/resources/org/jenkinsci/plugins/pipeline/modeldefinition/ModelInterpreter.groovy pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/AbstractModelDefTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/AgentTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/BasicModelDefTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/DeclarativeUpgradeTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/EnvironmentTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/PostStageTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/ToolsTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/ValidatorTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/WhenStageTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/parser/ExecuteConvertedTest.java pipeline-model-definition/src/test/resources/agentOnGroup.groovy pipeline-model-definition/src/test/resources/environmentInGroup.groovy pipeline-model-definition/src/test/resources/errors/emptyStagesInGroup.groovy pipeline-model-definition/src/test/resources/errors/parallelStagesAndGroups.groovy pipeline-model-definition/src/test/resources/errors/parallelStagesGroupsDeepNesting.groovy pipeline-model-definition/src/test/resources/errors/parallelStagesStepsAndGroups.groovy pipeline-model-definition/src/test/resources/errors/parallelStepsAndGroups.groovy pipeline-model-definition/src/test/resources/errors/topLevelStageGroupsDeepNesting.groovy pipeline-model-definition/src/test/resources/json/agentOnGroup.json pipeline-model-definition/src/test/resources/json/errors/parallelStagesAndGroups.json pipeline-model-definition/src/test/resources/json/errors/parallelStagesGroupsDeepNesting.json pipeline-model-definition/src/test/resources/json/errors/parallelStagesStepsAndGroups.json pipeline-model-definition/src/test/resources/json/errors/parallelStepsAndGroups.json pipeline-model-definition/src/test/resources/json/errors/topLevelStageGroupsDeepNesting.json pipeline-model-definition/src/test/resources/json/parallelStagesGroupsAndStages.json pipeline-model-definition/src/test/resources/json/topLevelStageGroup.json pipeline-model-definition/src/test/resources/org/jenkinsci/plugins/pipeline/modeldefinition/DeclarativeUpgradeTest/parallelAddsGroupsExecutionModelActionUpgrade.zip pipeline-model-definition/src/test/resources/parallelStagesGroupsAndStages.groovy pipeline-model-definition/src/test/resources/postStage/groupLocalAll.groovy pipeline-model-definition/src/test/resources/postStage/postInParallelAndSequential.groovy pipeline-model-definition/src/test/resources/toolsInGroup.groovy pipeline-model-definition/src/test/resources/topLevelStageGroup.groovy pipeline-model-definition/src/test/resources/when/simpleGroupWhen.groovy pom.xml http://jenkins-ci.org/commit/pipeline-model-definition-plugin/e080af72f68c685bc32346bfd0e9fb87867eb4f6 Log: [FIXED JENKINS-46809] Add sequential groups of parallel stages

          Andrew Bayer added a comment -

          Before anyone gets too excited, this isn't actually merged yet - I just pushed to a branch in the main repo so that JENKINS-45455's PR and someone's work-in-progress on matrix syntax can target that branch directly.

          Andrew Bayer added a comment - Before anyone gets too excited, this isn't actually merged yet - I just pushed to a branch in the main repo so that JENKINS-45455 's PR and someone's work-in-progress on matrix syntax can target that branch directly.

          abayer Would you dare to guess for an ETA on this? I'm think I'm basically looking at the same use case as mattkunze (as he states here), where I'd split first by platform (and thereby node) and then perform sequential steps for that platform/node.

          Daniel Hagström added a comment - abayer Would you dare to guess for an ETA on this? I'm think I'm basically looking at the same use case as mattkunze  ( as he states here ), where I'd split first by platform (and thereby node) and then perform sequential steps for that platform/node.

          danielresolutiongames Same here. I am also looking for the same use case.

          Is there any way we can pitch in to speed it up?

          Rachit Agrawal added a comment - danielresolutiongames Same here. I am also looking for the same use case. Is there any way we can pitch in to speed it up?

          Code changed in jenkins
          User: Andrew Bayer
          Path:
          pipeline-model-api/src/main/java/org/jenkinsci/plugins/pipeline/modeldefinition/ast/ModelASTStage.java
          pipeline-model-api/src/main/resources/ast-schema.json
          pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/model/Stage.groovy
          pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/JSONParser.groovy
          pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/ModelParser.groovy
          pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/RuntimeASTTransformer.groovy
          pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/validator/ModelValidatorImpl.groovy
          pipeline-model-definition/src/main/resources/org/jenkinsci/plugins/pipeline/modeldefinition/Messages.properties
          pipeline-model-definition/src/main/resources/org/jenkinsci/plugins/pipeline/modeldefinition/ModelInterpreter.groovy
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/AbstractModelDefTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/AgentTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/BasicModelDefTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/DeclarativeUpgradeTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/EnvironmentTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/PostStageTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/ToolsTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/ValidatorTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/WhenStageTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/parser/ExecuteConvertedTest.java
          pipeline-model-definition/src/test/resources/agentOnGroup.groovy
          pipeline-model-definition/src/test/resources/environmentInGroup.groovy
          pipeline-model-definition/src/test/resources/errors/emptyStagesInGroup.groovy
          pipeline-model-definition/src/test/resources/errors/parallelStagesAndGroups.groovy
          pipeline-model-definition/src/test/resources/errors/parallelStagesGroupsDeepNesting.groovy
          pipeline-model-definition/src/test/resources/errors/parallelStagesStepsAndGroups.groovy
          pipeline-model-definition/src/test/resources/errors/parallelStepsAndGroups.groovy
          pipeline-model-definition/src/test/resources/errors/topLevelStageGroupsDeepNesting.groovy
          pipeline-model-definition/src/test/resources/json/agentOnGroup.json
          pipeline-model-definition/src/test/resources/json/errors/parallelStagesAndGroups.json
          pipeline-model-definition/src/test/resources/json/errors/parallelStagesGroupsDeepNesting.json
          pipeline-model-definition/src/test/resources/json/errors/parallelStagesStepsAndGroups.json
          pipeline-model-definition/src/test/resources/json/errors/parallelStepsAndGroups.json
          pipeline-model-definition/src/test/resources/json/errors/topLevelStageGroupsDeepNesting.json
          pipeline-model-definition/src/test/resources/json/parallelStagesGroupsAndStages.json
          pipeline-model-definition/src/test/resources/json/topLevelStageGroup.json
          pipeline-model-definition/src/test/resources/org/jenkinsci/plugins/pipeline/modeldefinition/DeclarativeUpgradeTest/parallelAddsGroupsExecutionModelActionUpgrade.zip
          pipeline-model-definition/src/test/resources/parallelStagesGroupsAndStages.groovy
          pipeline-model-definition/src/test/resources/postStage/groupLocalAll.groovy
          pipeline-model-definition/src/test/resources/postStage/postInParallelAndSequential.groovy
          pipeline-model-definition/src/test/resources/toolsInGroup.groovy
          pipeline-model-definition/src/test/resources/topLevelStageGroup.groovy
          pipeline-model-definition/src/test/resources/when/simpleGroupWhen.groovy
          http://jenkins-ci.org/commit/pipeline-model-definition-plugin/78500b34f4c4f7c2b7089ac995c0269c32da644b
          Log:
          [FIXED JENKINS-46809] Add sequential groups of parallel stages

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Andrew Bayer Path: pipeline-model-api/src/main/java/org/jenkinsci/plugins/pipeline/modeldefinition/ast/ModelASTStage.java pipeline-model-api/src/main/resources/ast-schema.json pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/model/Stage.groovy pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/JSONParser.groovy pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/ModelParser.groovy pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/RuntimeASTTransformer.groovy pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/validator/ModelValidatorImpl.groovy pipeline-model-definition/src/main/resources/org/jenkinsci/plugins/pipeline/modeldefinition/Messages.properties pipeline-model-definition/src/main/resources/org/jenkinsci/plugins/pipeline/modeldefinition/ModelInterpreter.groovy pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/AbstractModelDefTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/AgentTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/BasicModelDefTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/DeclarativeUpgradeTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/EnvironmentTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/PostStageTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/ToolsTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/ValidatorTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/WhenStageTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/parser/ExecuteConvertedTest.java pipeline-model-definition/src/test/resources/agentOnGroup.groovy pipeline-model-definition/src/test/resources/environmentInGroup.groovy pipeline-model-definition/src/test/resources/errors/emptyStagesInGroup.groovy pipeline-model-definition/src/test/resources/errors/parallelStagesAndGroups.groovy pipeline-model-definition/src/test/resources/errors/parallelStagesGroupsDeepNesting.groovy pipeline-model-definition/src/test/resources/errors/parallelStagesStepsAndGroups.groovy pipeline-model-definition/src/test/resources/errors/parallelStepsAndGroups.groovy pipeline-model-definition/src/test/resources/errors/topLevelStageGroupsDeepNesting.groovy pipeline-model-definition/src/test/resources/json/agentOnGroup.json pipeline-model-definition/src/test/resources/json/errors/parallelStagesAndGroups.json pipeline-model-definition/src/test/resources/json/errors/parallelStagesGroupsDeepNesting.json pipeline-model-definition/src/test/resources/json/errors/parallelStagesStepsAndGroups.json pipeline-model-definition/src/test/resources/json/errors/parallelStepsAndGroups.json pipeline-model-definition/src/test/resources/json/errors/topLevelStageGroupsDeepNesting.json pipeline-model-definition/src/test/resources/json/parallelStagesGroupsAndStages.json pipeline-model-definition/src/test/resources/json/topLevelStageGroup.json pipeline-model-definition/src/test/resources/org/jenkinsci/plugins/pipeline/modeldefinition/DeclarativeUpgradeTest/parallelAddsGroupsExecutionModelActionUpgrade.zip pipeline-model-definition/src/test/resources/parallelStagesGroupsAndStages.groovy pipeline-model-definition/src/test/resources/postStage/groupLocalAll.groovy pipeline-model-definition/src/test/resources/postStage/postInParallelAndSequential.groovy pipeline-model-definition/src/test/resources/toolsInGroup.groovy pipeline-model-definition/src/test/resources/topLevelStageGroup.groovy pipeline-model-definition/src/test/resources/when/simpleGroupWhen.groovy http://jenkins-ci.org/commit/pipeline-model-definition-plugin/78500b34f4c4f7c2b7089ac995c0269c32da644b Log: [FIXED JENKINS-46809] Add sequential groups of parallel stages

          Code changed in jenkins
          User: Andrew Bayer
          Path:
          pipeline-model-api/src/main/java/org/jenkinsci/plugins/pipeline/modeldefinition/ast/ModelASTStage.java
          pipeline-model-api/src/main/resources/ast-schema.json
          pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/model/Stage.groovy
          pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/JSONParser.groovy
          pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/ModelParser.groovy
          pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/RuntimeASTTransformer.groovy
          pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/validator/ModelValidatorImpl.groovy
          pipeline-model-definition/src/main/resources/org/jenkinsci/plugins/pipeline/modeldefinition/Messages.properties
          pipeline-model-definition/src/main/resources/org/jenkinsci/plugins/pipeline/modeldefinition/ModelInterpreter.groovy
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/AbstractModelDefTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/AgentTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/BasicModelDefTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/DeclarativeUpgradeTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/EnvironmentTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/PostStageTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/ToolsTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/ValidatorTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/WhenStageTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/parser/ExecuteConvertedTest.java
          pipeline-model-definition/src/test/resources/agentOnGroup.groovy
          pipeline-model-definition/src/test/resources/environmentInGroup.groovy
          pipeline-model-definition/src/test/resources/errors/emptyStagesInGroup.groovy
          pipeline-model-definition/src/test/resources/errors/parallelStagesAndGroups.groovy
          pipeline-model-definition/src/test/resources/errors/parallelStagesGroupsDeepNesting.groovy
          pipeline-model-definition/src/test/resources/errors/parallelStagesStepsAndGroups.groovy
          pipeline-model-definition/src/test/resources/errors/parallelStepsAndGroups.groovy
          pipeline-model-definition/src/test/resources/errors/topLevelStageGroupsDeepNesting.groovy
          pipeline-model-definition/src/test/resources/json/agentOnGroup.json
          pipeline-model-definition/src/test/resources/json/errors/parallelStagesAndGroups.json
          pipeline-model-definition/src/test/resources/json/errors/parallelStagesGroupsDeepNesting.json
          pipeline-model-definition/src/test/resources/json/errors/parallelStagesStepsAndGroups.json
          pipeline-model-definition/src/test/resources/json/errors/parallelStepsAndGroups.json
          pipeline-model-definition/src/test/resources/json/errors/topLevelStageGroupsDeepNesting.json
          pipeline-model-definition/src/test/resources/json/parallelStagesGroupsAndStages.json
          pipeline-model-definition/src/test/resources/json/topLevelStageGroup.json
          pipeline-model-definition/src/test/resources/org/jenkinsci/plugins/pipeline/modeldefinition/DeclarativeUpgradeTest/parallelAddsGroupsExecutionModelActionUpgrade.zip
          pipeline-model-definition/src/test/resources/parallelStagesGroupsAndStages.groovy
          pipeline-model-definition/src/test/resources/postStage/groupLocalAll.groovy
          pipeline-model-definition/src/test/resources/postStage/postInParallelAndSequential.groovy
          pipeline-model-definition/src/test/resources/toolsInGroup.groovy
          pipeline-model-definition/src/test/resources/topLevelStageGroup.groovy
          pipeline-model-definition/src/test/resources/when/simpleGroupWhen.groovy
          http://jenkins-ci.org/commit/pipeline-model-definition-plugin/c87840505e3a02e9da37416d8dd65f0240a34eb4
          Log:
          [FIXED JENKINS-46809] Add sequential groups of parallel stages

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Andrew Bayer Path: pipeline-model-api/src/main/java/org/jenkinsci/plugins/pipeline/modeldefinition/ast/ModelASTStage.java pipeline-model-api/src/main/resources/ast-schema.json pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/model/Stage.groovy pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/JSONParser.groovy pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/ModelParser.groovy pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/RuntimeASTTransformer.groovy pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/validator/ModelValidatorImpl.groovy pipeline-model-definition/src/main/resources/org/jenkinsci/plugins/pipeline/modeldefinition/Messages.properties pipeline-model-definition/src/main/resources/org/jenkinsci/plugins/pipeline/modeldefinition/ModelInterpreter.groovy pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/AbstractModelDefTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/AgentTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/BasicModelDefTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/DeclarativeUpgradeTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/EnvironmentTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/PostStageTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/ToolsTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/ValidatorTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/WhenStageTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/parser/ExecuteConvertedTest.java pipeline-model-definition/src/test/resources/agentOnGroup.groovy pipeline-model-definition/src/test/resources/environmentInGroup.groovy pipeline-model-definition/src/test/resources/errors/emptyStagesInGroup.groovy pipeline-model-definition/src/test/resources/errors/parallelStagesAndGroups.groovy pipeline-model-definition/src/test/resources/errors/parallelStagesGroupsDeepNesting.groovy pipeline-model-definition/src/test/resources/errors/parallelStagesStepsAndGroups.groovy pipeline-model-definition/src/test/resources/errors/parallelStepsAndGroups.groovy pipeline-model-definition/src/test/resources/errors/topLevelStageGroupsDeepNesting.groovy pipeline-model-definition/src/test/resources/json/agentOnGroup.json pipeline-model-definition/src/test/resources/json/errors/parallelStagesAndGroups.json pipeline-model-definition/src/test/resources/json/errors/parallelStagesGroupsDeepNesting.json pipeline-model-definition/src/test/resources/json/errors/parallelStagesStepsAndGroups.json pipeline-model-definition/src/test/resources/json/errors/parallelStepsAndGroups.json pipeline-model-definition/src/test/resources/json/errors/topLevelStageGroupsDeepNesting.json pipeline-model-definition/src/test/resources/json/parallelStagesGroupsAndStages.json pipeline-model-definition/src/test/resources/json/topLevelStageGroup.json pipeline-model-definition/src/test/resources/org/jenkinsci/plugins/pipeline/modeldefinition/DeclarativeUpgradeTest/parallelAddsGroupsExecutionModelActionUpgrade.zip pipeline-model-definition/src/test/resources/parallelStagesGroupsAndStages.groovy pipeline-model-definition/src/test/resources/postStage/groupLocalAll.groovy pipeline-model-definition/src/test/resources/postStage/postInParallelAndSequential.groovy pipeline-model-definition/src/test/resources/toolsInGroup.groovy pipeline-model-definition/src/test/resources/topLevelStageGroup.groovy pipeline-model-definition/src/test/resources/when/simpleGroupWhen.groovy http://jenkins-ci.org/commit/pipeline-model-definition-plugin/c87840505e3a02e9da37416d8dd65f0240a34eb4 Log: [FIXED JENKINS-46809] Add sequential groups of parallel stages

          Code changed in jenkins
          User: Andrew Bayer
          Path:
          pipeline-model-api/src/main/java/org/jenkinsci/plugins/pipeline/modeldefinition/ast/ModelASTStage.java
          pipeline-model-api/src/main/resources/ast-schema.json
          pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/model/Stage.groovy
          pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/JSONParser.groovy
          pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/ModelParser.groovy
          pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/RuntimeASTTransformer.groovy
          pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/validator/ModelValidatorImpl.groovy
          pipeline-model-definition/src/main/resources/org/jenkinsci/plugins/pipeline/modeldefinition/Messages.properties
          pipeline-model-definition/src/main/resources/org/jenkinsci/plugins/pipeline/modeldefinition/ModelInterpreter.groovy
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/AbstractModelDefTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/AgentTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/BasicModelDefTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/DeclarativeUpgradeTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/EnvironmentTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/PostStageTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/ToolsTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/ValidatorTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/WhenStageTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/parser/ExecuteConvertedTest.java
          pipeline-model-definition/src/test/resources/agentOnGroup.groovy
          pipeline-model-definition/src/test/resources/environmentInGroup.groovy
          pipeline-model-definition/src/test/resources/errors/emptyStagesInGroup.groovy
          pipeline-model-definition/src/test/resources/errors/parallelStagesAndGroups.groovy
          pipeline-model-definition/src/test/resources/errors/parallelStagesGroupsDeepNesting.groovy
          pipeline-model-definition/src/test/resources/errors/parallelStagesStepsAndGroups.groovy
          pipeline-model-definition/src/test/resources/errors/parallelStepsAndGroups.groovy
          pipeline-model-definition/src/test/resources/errors/topLevelStageGroupsDeepNesting.groovy
          pipeline-model-definition/src/test/resources/json/agentOnGroup.json
          pipeline-model-definition/src/test/resources/json/errors/parallelStagesAndGroups.json
          pipeline-model-definition/src/test/resources/json/errors/parallelStagesGroupsDeepNesting.json
          pipeline-model-definition/src/test/resources/json/errors/parallelStagesStepsAndGroups.json
          pipeline-model-definition/src/test/resources/json/errors/parallelStepsAndGroups.json
          pipeline-model-definition/src/test/resources/json/errors/topLevelStageGroupsDeepNesting.json
          pipeline-model-definition/src/test/resources/json/parallelStagesGroupsAndStages.json
          pipeline-model-definition/src/test/resources/json/topLevelStageGroup.json
          pipeline-model-definition/src/test/resources/org/jenkinsci/plugins/pipeline/modeldefinition/DeclarativeUpgradeTest/parallelAddsGroupsExecutionModelActionUpgrade.zip
          pipeline-model-definition/src/test/resources/parallelStagesGroupsAndStages.groovy
          pipeline-model-definition/src/test/resources/postStage/groupLocalAll.groovy
          pipeline-model-definition/src/test/resources/postStage/postInParallelAndSequential.groovy
          pipeline-model-definition/src/test/resources/toolsInGroup.groovy
          pipeline-model-definition/src/test/resources/topLevelStageGroup.groovy
          pipeline-model-definition/src/test/resources/when/simpleGroupWhen.groovy
          http://jenkins-ci.org/commit/pipeline-model-definition-plugin/9511756ebf7dcc2dc2fc5ed286ef1ba11525b3e8
          Log:
          [FIXED JENKINS-46809] Add sequential groups of parallel stages

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Andrew Bayer Path: pipeline-model-api/src/main/java/org/jenkinsci/plugins/pipeline/modeldefinition/ast/ModelASTStage.java pipeline-model-api/src/main/resources/ast-schema.json pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/model/Stage.groovy pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/JSONParser.groovy pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/ModelParser.groovy pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/RuntimeASTTransformer.groovy pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/validator/ModelValidatorImpl.groovy pipeline-model-definition/src/main/resources/org/jenkinsci/plugins/pipeline/modeldefinition/Messages.properties pipeline-model-definition/src/main/resources/org/jenkinsci/plugins/pipeline/modeldefinition/ModelInterpreter.groovy pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/AbstractModelDefTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/AgentTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/BasicModelDefTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/DeclarativeUpgradeTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/EnvironmentTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/PostStageTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/ToolsTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/ValidatorTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/WhenStageTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/parser/ExecuteConvertedTest.java pipeline-model-definition/src/test/resources/agentOnGroup.groovy pipeline-model-definition/src/test/resources/environmentInGroup.groovy pipeline-model-definition/src/test/resources/errors/emptyStagesInGroup.groovy pipeline-model-definition/src/test/resources/errors/parallelStagesAndGroups.groovy pipeline-model-definition/src/test/resources/errors/parallelStagesGroupsDeepNesting.groovy pipeline-model-definition/src/test/resources/errors/parallelStagesStepsAndGroups.groovy pipeline-model-definition/src/test/resources/errors/parallelStepsAndGroups.groovy pipeline-model-definition/src/test/resources/errors/topLevelStageGroupsDeepNesting.groovy pipeline-model-definition/src/test/resources/json/agentOnGroup.json pipeline-model-definition/src/test/resources/json/errors/parallelStagesAndGroups.json pipeline-model-definition/src/test/resources/json/errors/parallelStagesGroupsDeepNesting.json pipeline-model-definition/src/test/resources/json/errors/parallelStagesStepsAndGroups.json pipeline-model-definition/src/test/resources/json/errors/parallelStepsAndGroups.json pipeline-model-definition/src/test/resources/json/errors/topLevelStageGroupsDeepNesting.json pipeline-model-definition/src/test/resources/json/parallelStagesGroupsAndStages.json pipeline-model-definition/src/test/resources/json/topLevelStageGroup.json pipeline-model-definition/src/test/resources/org/jenkinsci/plugins/pipeline/modeldefinition/DeclarativeUpgradeTest/parallelAddsGroupsExecutionModelActionUpgrade.zip pipeline-model-definition/src/test/resources/parallelStagesGroupsAndStages.groovy pipeline-model-definition/src/test/resources/postStage/groupLocalAll.groovy pipeline-model-definition/src/test/resources/postStage/postInParallelAndSequential.groovy pipeline-model-definition/src/test/resources/toolsInGroup.groovy pipeline-model-definition/src/test/resources/topLevelStageGroup.groovy pipeline-model-definition/src/test/resources/when/simpleGroupWhen.groovy http://jenkins-ci.org/commit/pipeline-model-definition-plugin/9511756ebf7dcc2dc2fc5ed286ef1ba11525b3e8 Log: [FIXED JENKINS-46809] Add sequential groups of parallel stages

          Code changed in jenkins
          User: Andrew Bayer
          Path:
          pipeline-model-api/src/main/java/org/jenkinsci/plugins/pipeline/modeldefinition/ast/ModelASTStage.java
          pipeline-model-api/src/main/resources/ast-schema.json
          pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/model/Stage.groovy
          pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/JSONParser.groovy
          pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/ModelParser.groovy
          pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/RuntimeASTTransformer.groovy
          pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/validator/ModelValidatorImpl.groovy
          pipeline-model-definition/src/main/resources/org/jenkinsci/plugins/pipeline/modeldefinition/Messages.properties
          pipeline-model-definition/src/main/resources/org/jenkinsci/plugins/pipeline/modeldefinition/ModelInterpreter.groovy
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/AbstractModelDefTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/AgentTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/BasicModelDefTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/DeclarativeUpgradeTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/EnvironmentTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/PostStageTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/ToolsTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/ValidatorTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/WhenStageTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/parser/ExecuteConvertedTest.java
          pipeline-model-definition/src/test/resources/agentOnGroup.groovy
          pipeline-model-definition/src/test/resources/environmentInGroup.groovy
          pipeline-model-definition/src/test/resources/errors/emptyStagesInGroup.groovy
          pipeline-model-definition/src/test/resources/errors/parallelStagesAndGroups.groovy
          pipeline-model-definition/src/test/resources/errors/parallelStagesGroupsDeepNesting.groovy
          pipeline-model-definition/src/test/resources/errors/parallelStagesStepsAndGroups.groovy
          pipeline-model-definition/src/test/resources/errors/parallelStepsAndGroups.groovy
          pipeline-model-definition/src/test/resources/errors/topLevelStageGroupsDeepNesting.groovy
          pipeline-model-definition/src/test/resources/json/agentOnGroup.json
          pipeline-model-definition/src/test/resources/json/errors/parallelStagesAndGroups.json
          pipeline-model-definition/src/test/resources/json/errors/parallelStagesGroupsDeepNesting.json
          pipeline-model-definition/src/test/resources/json/errors/parallelStagesStepsAndGroups.json
          pipeline-model-definition/src/test/resources/json/errors/parallelStepsAndGroups.json
          pipeline-model-definition/src/test/resources/json/errors/topLevelStageGroupsDeepNesting.json
          pipeline-model-definition/src/test/resources/json/parallelStagesGroupsAndStages.json
          pipeline-model-definition/src/test/resources/json/topLevelStageGroup.json
          pipeline-model-definition/src/test/resources/org/jenkinsci/plugins/pipeline/modeldefinition/DeclarativeUpgradeTest/parallelAddsGroupsExecutionModelActionUpgrade.zip
          pipeline-model-definition/src/test/resources/parallelStagesGroupsAndStages.groovy
          pipeline-model-definition/src/test/resources/postStage/groupLocalAll.groovy
          pipeline-model-definition/src/test/resources/postStage/postInParallelAndSequential.groovy
          pipeline-model-definition/src/test/resources/toolsInGroup.groovy
          pipeline-model-definition/src/test/resources/topLevelStageGroup.groovy
          pipeline-model-definition/src/test/resources/when/simpleGroupWhen.groovy
          http://jenkins-ci.org/commit/pipeline-model-definition-plugin/19a6837416add076568627cfc494c71efd6a1819
          Log:
          [FIXED JENKINS-46809] Add sequential groups of parallel stages

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Andrew Bayer Path: pipeline-model-api/src/main/java/org/jenkinsci/plugins/pipeline/modeldefinition/ast/ModelASTStage.java pipeline-model-api/src/main/resources/ast-schema.json pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/model/Stage.groovy pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/JSONParser.groovy pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/ModelParser.groovy pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/RuntimeASTTransformer.groovy pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/validator/ModelValidatorImpl.groovy pipeline-model-definition/src/main/resources/org/jenkinsci/plugins/pipeline/modeldefinition/Messages.properties pipeline-model-definition/src/main/resources/org/jenkinsci/plugins/pipeline/modeldefinition/ModelInterpreter.groovy pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/AbstractModelDefTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/AgentTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/BasicModelDefTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/DeclarativeUpgradeTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/EnvironmentTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/PostStageTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/ToolsTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/ValidatorTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/WhenStageTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/parser/ExecuteConvertedTest.java pipeline-model-definition/src/test/resources/agentOnGroup.groovy pipeline-model-definition/src/test/resources/environmentInGroup.groovy pipeline-model-definition/src/test/resources/errors/emptyStagesInGroup.groovy pipeline-model-definition/src/test/resources/errors/parallelStagesAndGroups.groovy pipeline-model-definition/src/test/resources/errors/parallelStagesGroupsDeepNesting.groovy pipeline-model-definition/src/test/resources/errors/parallelStagesStepsAndGroups.groovy pipeline-model-definition/src/test/resources/errors/parallelStepsAndGroups.groovy pipeline-model-definition/src/test/resources/errors/topLevelStageGroupsDeepNesting.groovy pipeline-model-definition/src/test/resources/json/agentOnGroup.json pipeline-model-definition/src/test/resources/json/errors/parallelStagesAndGroups.json pipeline-model-definition/src/test/resources/json/errors/parallelStagesGroupsDeepNesting.json pipeline-model-definition/src/test/resources/json/errors/parallelStagesStepsAndGroups.json pipeline-model-definition/src/test/resources/json/errors/parallelStepsAndGroups.json pipeline-model-definition/src/test/resources/json/errors/topLevelStageGroupsDeepNesting.json pipeline-model-definition/src/test/resources/json/parallelStagesGroupsAndStages.json pipeline-model-definition/src/test/resources/json/topLevelStageGroup.json pipeline-model-definition/src/test/resources/org/jenkinsci/plugins/pipeline/modeldefinition/DeclarativeUpgradeTest/parallelAddsGroupsExecutionModelActionUpgrade.zip pipeline-model-definition/src/test/resources/parallelStagesGroupsAndStages.groovy pipeline-model-definition/src/test/resources/postStage/groupLocalAll.groovy pipeline-model-definition/src/test/resources/postStage/postInParallelAndSequential.groovy pipeline-model-definition/src/test/resources/toolsInGroup.groovy pipeline-model-definition/src/test/resources/topLevelStageGroup.groovy pipeline-model-definition/src/test/resources/when/simpleGroupWhen.groovy http://jenkins-ci.org/commit/pipeline-model-definition-plugin/19a6837416add076568627cfc494c71efd6a1819 Log: [FIXED JENKINS-46809] Add sequential groups of parallel stages

          Code changed in jenkins
          User: Andrew Bayer
          Path:
          pipeline-model-api/src/main/java/org/jenkinsci/plugins/pipeline/modeldefinition/ast/ModelASTStage.java
          pipeline-model-api/src/main/resources/ast-schema.json
          pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/model/Stage.groovy
          pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/JSONParser.groovy
          pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/ModelParser.groovy
          pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/RuntimeASTTransformer.groovy
          pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/validator/ModelValidatorImpl.groovy
          pipeline-model-definition/src/main/resources/org/jenkinsci/plugins/pipeline/modeldefinition/Messages.properties
          pipeline-model-definition/src/main/resources/org/jenkinsci/plugins/pipeline/modeldefinition/ModelInterpreter.groovy
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/AbstractModelDefTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/AgentTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/BasicModelDefTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/DeclarativeUpgradeTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/EnvironmentTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/PostStageTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/ToolsTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/ValidatorTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/WhenStageTest.java
          pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/parser/ExecuteConvertedTest.java
          pipeline-model-definition/src/test/resources/agentOnGroup.groovy
          pipeline-model-definition/src/test/resources/environmentInGroup.groovy
          pipeline-model-definition/src/test/resources/errors/emptyStagesInGroup.groovy
          pipeline-model-definition/src/test/resources/errors/parallelStagesAndGroups.groovy
          pipeline-model-definition/src/test/resources/errors/parallelStagesGroupsDeepNesting.groovy
          pipeline-model-definition/src/test/resources/errors/parallelStagesStepsAndGroups.groovy
          pipeline-model-definition/src/test/resources/errors/parallelStepsAndGroups.groovy
          pipeline-model-definition/src/test/resources/errors/topLevelStageGroupsDeepNesting.groovy
          pipeline-model-definition/src/test/resources/json/agentOnGroup.json
          pipeline-model-definition/src/test/resources/json/errors/parallelStagesAndGroups.json
          pipeline-model-definition/src/test/resources/json/errors/parallelStagesGroupsDeepNesting.json
          pipeline-model-definition/src/test/resources/json/errors/parallelStagesStepsAndGroups.json
          pipeline-model-definition/src/test/resources/json/errors/parallelStepsAndGroups.json
          pipeline-model-definition/src/test/resources/json/errors/topLevelStageGroupsDeepNesting.json
          pipeline-model-definition/src/test/resources/json/parallelStagesGroupsAndStages.json
          pipeline-model-definition/src/test/resources/json/topLevelStageGroup.json
          pipeline-model-definition/src/test/resources/org/jenkinsci/plugins/pipeline/modeldefinition/DeclarativeUpgradeTest/parallelAddsGroupsExecutionModelActionUpgrade.zip
          pipeline-model-definition/src/test/resources/parallelStagesGroupsAndStages.groovy
          pipeline-model-definition/src/test/resources/postStage/groupLocalAll.groovy
          pipeline-model-definition/src/test/resources/postStage/postInParallelAndSequential.groovy
          pipeline-model-definition/src/test/resources/toolsInGroup.groovy
          pipeline-model-definition/src/test/resources/topLevelStageGroup.groovy
          pipeline-model-definition/src/test/resources/when/simpleGroupWhen.groovy
          http://jenkins-ci.org/commit/pipeline-model-definition-plugin/79cad4ee2026e2123dcf13c6614c1988303fc034
          Log:
          [FIXED JENKINS-46809] Add sequential groups of parallel stages

          *NOTE:* This service been marked for deprecation: https://developer.github.com/changes/2018-04-25-github-services-deprecation/

          Functionality will be removed from GitHub.com on January 31st, 2019.

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Andrew Bayer Path: pipeline-model-api/src/main/java/org/jenkinsci/plugins/pipeline/modeldefinition/ast/ModelASTStage.java pipeline-model-api/src/main/resources/ast-schema.json pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/model/Stage.groovy pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/JSONParser.groovy pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/ModelParser.groovy pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/parser/RuntimeASTTransformer.groovy pipeline-model-definition/src/main/groovy/org/jenkinsci/plugins/pipeline/modeldefinition/validator/ModelValidatorImpl.groovy pipeline-model-definition/src/main/resources/org/jenkinsci/plugins/pipeline/modeldefinition/Messages.properties pipeline-model-definition/src/main/resources/org/jenkinsci/plugins/pipeline/modeldefinition/ModelInterpreter.groovy pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/AbstractModelDefTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/AgentTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/BasicModelDefTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/DeclarativeUpgradeTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/EnvironmentTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/PostStageTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/ToolsTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/ValidatorTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/WhenStageTest.java pipeline-model-definition/src/test/java/org/jenkinsci/plugins/pipeline/modeldefinition/parser/ExecuteConvertedTest.java pipeline-model-definition/src/test/resources/agentOnGroup.groovy pipeline-model-definition/src/test/resources/environmentInGroup.groovy pipeline-model-definition/src/test/resources/errors/emptyStagesInGroup.groovy pipeline-model-definition/src/test/resources/errors/parallelStagesAndGroups.groovy pipeline-model-definition/src/test/resources/errors/parallelStagesGroupsDeepNesting.groovy pipeline-model-definition/src/test/resources/errors/parallelStagesStepsAndGroups.groovy pipeline-model-definition/src/test/resources/errors/parallelStepsAndGroups.groovy pipeline-model-definition/src/test/resources/errors/topLevelStageGroupsDeepNesting.groovy pipeline-model-definition/src/test/resources/json/agentOnGroup.json pipeline-model-definition/src/test/resources/json/errors/parallelStagesAndGroups.json pipeline-model-definition/src/test/resources/json/errors/parallelStagesGroupsDeepNesting.json pipeline-model-definition/src/test/resources/json/errors/parallelStagesStepsAndGroups.json pipeline-model-definition/src/test/resources/json/errors/parallelStepsAndGroups.json pipeline-model-definition/src/test/resources/json/errors/topLevelStageGroupsDeepNesting.json pipeline-model-definition/src/test/resources/json/parallelStagesGroupsAndStages.json pipeline-model-definition/src/test/resources/json/topLevelStageGroup.json pipeline-model-definition/src/test/resources/org/jenkinsci/plugins/pipeline/modeldefinition/DeclarativeUpgradeTest/parallelAddsGroupsExecutionModelActionUpgrade.zip pipeline-model-definition/src/test/resources/parallelStagesGroupsAndStages.groovy pipeline-model-definition/src/test/resources/postStage/groupLocalAll.groovy pipeline-model-definition/src/test/resources/postStage/postInParallelAndSequential.groovy pipeline-model-definition/src/test/resources/toolsInGroup.groovy pipeline-model-definition/src/test/resources/topLevelStageGroup.groovy pipeline-model-definition/src/test/resources/when/simpleGroupWhen.groovy http://jenkins-ci.org/commit/pipeline-model-definition-plugin/79cad4ee2026e2123dcf13c6614c1988303fc034 Log: [FIXED JENKINS-46809] Add sequential groups of parallel stages * NOTE: * This service been marked for deprecation: https://developer.github.com/changes/2018-04-25-github-services-deprecation/ Functionality will be removed from GitHub.com on January 31st, 2019.

          I see there are multiple PRs raised. Is it available now? Anyway we can use this functionality?

          Rachit Agrawal added a comment - I see there are multiple PRs raised. Is it available now? Anyway we can use this functionality?

          Dineshkumar Ayyavoo added a comment - - edited

          I am facing the similar problem as mentioned here - https://issues.jenkins-ci.org/browse/JENKINS-39119 - when having the node block inside the stage block in a parallel tasks (why node block inside stage block, because we don't want to create duplicate stage for each task), the node get freed after the first stage and it become available for other jobs. Please find the below code, where the node get occupied by another job after the stage `first`. 

          def stages = ["first","second"]
          
          def tasks = [:]
          
          for (item in stages) {
            stage (item) {
              tasks["win"] = {
                node(mywinnode) {
                  bat 'echo "check"'
                }
              }
              tasks["mac"] = {
                node(mymacnode) {
                  sh 'echo "check"'
                }
              }
              parallel task
            }
          }

          And in the above ticket its mentioned the fix will stated in this ticket. However I want to check is the fix is only for the declarative pipeline syntax?. 

          Dineshkumar Ayyavoo added a comment - - edited I am facing the similar problem as mentioned here - https://issues.jenkins-ci.org/browse/JENKINS-39119  - when having the node block inside the stage block in a parallel tasks (why node block inside stage block, because we don't want to create duplicate stage for each task), the node get freed after the first stage and it become available for other jobs. Please find the below code, where the node get occupied by another job after the stage `first`.  def stages = [ "first" , "second" ] def tasks = [:] for (item in stages) { stage (item) { tasks[ "win" ] = { node(mywinnode) { bat 'echo "check" '     } } tasks[ "mac" ] = { node(mymacnode) { sh 'echo "check" ' } } parallel task } } And in the above ticket its mentioned the fix will stated in this ticket. However I want to check is the fix is only for the declarative pipeline syntax?. 

          Hokwang Lee added a comment -

          I am waitting this fix.

          Hokwang Lee added a comment - I am waitting this fix.

          horangs Me too.

          Rachit Agrawal added a comment - horangs Me too.

          abayer: Would it be possible to provide a rough ETA on this issue? I need to consider writing my own multi-stage locking mechanism if this one won't arrive soon. BR.

          Thomas Johansen added a comment - abayer : Would it be possible to provide a rough ETA on this issue? I need to consider writing my own multi-stage locking mechanism if this one won't arrive soon. BR.

          It looks like it's getting closer - it's code review at https://github.com/jenkinsci/pipeline-model-definition-plugin/pull/227 with some suggestion it might be released in the next week or two.

          Richard Whitehouse added a comment - It looks like it's getting closer - it's code review at https://github.com/jenkinsci/pipeline-model-definition-plugin/pull/227  with some suggestion it might be released in the next week or two.

          Andrew Bayer added a comment -

          Yup, that sounds about right - very sorry for the delays!

          Andrew Bayer added a comment - Yup, that sounds about right - very sorry for the delays!

          Andrew Bayer added a comment -

          (finally) merged! JENKINS-45455 should be ready to merge shortly as well, and then I'd expect 1.3 to be out within a couple days (gotta finish docs polish/work for JENKINS-45455 first).

          Andrew Bayer added a comment - (finally) merged! JENKINS-45455 should be ready to merge shortly as well, and then I'd expect 1.3 to be out within a couple days (gotta finish docs polish/work for JENKINS-45455 first).

          Dineshkumar Ayyavoo added a comment - abayer will this resolve my requirement here  https://issues.jenkins-ci.org/browse/JENKINS-46809?focusedCommentId=338694&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-338694

          Andrew Bayer added a comment -

          dineshk7 - yes, you will be able to have a parent stage with an agent and then a sequence of stages within that parent that automatically use the same agent/workspace/executor without freeing up the executor in between.

          Andrew Bayer added a comment - dineshk7 - yes, you will be able to have a parent stage with an agent and then a sequence of stages within that parent that automatically use the same agent/workspace/executor without freeing up the executor in between.

          abayer gr8 then. thanks

          Dineshkumar Ayyavoo added a comment - abayer gr8 then. thanks

          Hokwang Lee added a comment -

          I testest shortly before, but I guess there's a visualization problem in here.

          I use Jenkinsfile using official doc

          https://jenkins.io/doc/book/pipeline/syntax/#parallel-stages-example

           

          and it shows like below. I want to see nested stage.

          Hokwang Lee added a comment - I testest shortly before, but I guess there's a visualization problem in here. I use Jenkinsfile using official doc https://jenkins.io/doc/book/pipeline/syntax/#parallel-stages-example   and it shows like below. I want to see nested stage.

          Kasia Gauza added a comment -

          Will the functionality will also be available in scripted pipelines?

          Kasia Gauza added a comment - Will the functionality will also be available in scripted pipelines?

          Andrew Bayer added a comment -

          horangs - the visualization is coming later on the Blue Ocean side - you can follow JENKINS-49050 for progress on that.

          nimrod - you can already do nested stages in Scripted, though as with Declarative sequential stages, you won't get visualization for it in Blue Ocean until JENKINS-49050 is done.

          Andrew Bayer added a comment - horangs - the visualization is coming later on the Blue Ocean side - you can follow JENKINS-49050 for progress on that. nimrod - you can already do nested stages in Scripted, though as with Declarative sequential stages, you won't get visualization for it in Blue Ocean until JENKINS-49050 is done.

          Richard Whitehouse added a comment - - edited

          When attempting a slightly complex flow, I get:
          WorkflowScript: 954: Parallel stages or branches can only be included in a top-level stage. @ line 954, column 17.
          stage('Destroy old QA1 deployment')
          abayer Is there a good reason for such a restriction?

          For example, when using this to resolve https://issues.jenkins-ci.org/browse/JENKINS-43336 it's desirable to have an outer stage which holds a lock, which contains two stages, one of which does a couple of things in parallel, and the other of which runs some stuff - e.g. setting up two test rigs in parallel, and then running some tests across both of them.

          However, this is blocked, and it's not obvious to me why such a restriction exists.

          Richard Whitehouse added a comment - - edited When attempting a slightly complex flow, I get: WorkflowScript: 954: Parallel stages or branches can only be included in a top-level stage. @ line 954, column 17. stage('Destroy old QA1 deployment') abayer Is there a good reason for such a restriction? For example, when using this to resolve https://issues.jenkins-ci.org/browse/JENKINS-43336  it's desirable to have an outer stage which holds a lock, which contains two stages, one of which does a couple of things in parallel, and the other of which runs some stuff - e.g. setting up two test rigs in parallel, and then running some tests across both of them. However, this is blocked, and it's not obvious to me why such a restriction exists.

          Andrew Bayer added a comment -

          We don't support arbitrarily deep nesting of parallel or sequential stages for a number of reasons - visualization challenges most prominently.

          Andrew Bayer added a comment - We don't support arbitrarily deep nesting of parallel or sequential stages for a number of reasons - visualization challenges most prominently.

          Liam Newman added a comment -

          richardwhiuk 

          You make a good point and I think there's other discussion to be had around this.  Could you open a JIRA for this?  

           

          Liam Newman added a comment - richardwhiuk   You make a good point and I think there's other discussion to be had around this.  Could you open a JIRA for this?    

          Jenn Briden added a comment -

          richardwhiuk, can you please give me an example of why you would set up your pipeline that way? Why not create a sibling stage with nested stages? It seems unnecessarily complex. (I'm the blue ocean and pipeline product manager, which is why I need to better understand the use case.)

          Jenn Briden added a comment - richardwhiuk , can you please give me an example of why you would set up your pipeline that way? Why not create a sibling stage with nested stages? It seems unnecessarily complex. (I'm the blue ocean and pipeline product manager, which is why I need to better understand the use case.)

          chanti vlad added a comment - - edited

          By creating a Pipeline job with the content of the ticket description:

          pipeline {
            agent none
            stages {
              stage('Parallel stuff') {
                parallel 'branch 1' : {
                  // Sequencial stages
                  stage('Branch 1 stage 1'){
                      agent any
                      steps {
                          echo "In branch 1 stage 1"
                      }
                  }
                  stage('Branch 1 stage 2'){
                      agent none // With that kind of sequencial stage, we can change the agent to run on
                      steps {
                          sleep 30
                      }
                  }
                }, 'branch 2': { // Parallel execution
                  stage('Branch 2 stage 1'){
                      agent any
                      steps {
                          echo "In branch 2 stage 1"
                          sleep 60
                      }
                  }
                }
              }
            }
          }
          

          i get following errors:

           

          WorkflowScript: 4: Expected a block for parallel @ line 4, column 5.
                 stage('Parallel stuff') {
                 ^
          
          WorkflowScript: 4: Expected one of "steps", "stages", or "parallel" for stage "Parallel stuff" @ line 4, column 5.
                 stage('Parallel stuff') {
                 ^
          
          2 errors
          

          i am using

          Jenkins 2.121.1 + Blue Ocean 1.6.0 +  Pipeline 2.5 +

          Pipeline Graph Analysis Plugin
          Provides a REST API to access pipeline and pipeline run data.
          1.6
          Pipeline implementation for Blue Ocean
          This plugin is a part of BlueOcean Plugin
          1.6.0
          Pipeline SCM API for Blue Ocean
          This plugin is a part of BlueOcean Plugin
          1.6.0
          Pipeline: API
          Plugin that defines Pipeline API.
          2.28
          Pipeline: Basic Steps
          Commonly used steps for Pipelines.
          2.9
          Pipeline: Build Step
          Adds the Pipeline step build to trigger builds of other jobs.
          2.7
          Pipeline: Declarative
          An opinionated, declarative Pipeline.
          1.3
          Pipeline: Declarative Agent API
          Replaced by Pipeline: Declarative Extension Points API plugin.
          1.1.1
          Pipeline: Declarative Extension Points API
          APIs for extension points used in Declarative Pipelines.
          1.3
          Pipeline: GitHub Groovy Libraries
          Allows Pipeline Grrovy libraries to be loaded on the fly from GitHub.
          1.0
          Pipeline: Groovy
          Pipeline execution engine based on continuation passing style transformation of Groovy scripts.
          2.53
          Pipeline: Input Step
          Adds the Pipeline step input to wait for human input or approval.
          2.8
          Pipeline: Job
          Defines a new job type for pipelines and provides their generic user interface.
          2.21
          Pipeline: Milestone Step
          Plugin that provides the milestone step
          1.3.1
          Pipeline: Model API
          Model API for Declarative Pipeline.
          1.3
          Pipeline: Multibranch
          Enhances Pipeline plugin to handle branches better by automatically grouping builds from different branches.
          2.19
          Pipeline: Nodes and Processes
          Pipeline steps locking agents and workspaces, and running external processes that may survive a Jenkins restart or slave reconnection.
          2.19
          Pipeline: REST API Plugin
          Provides a REST API to access pipeline and pipeline run data.
          2.10
          Pipeline: SCM Step
          Adds a Pipeline step to check out or update working sources from various SCMs (version control).
          2.6
          Pipeline: Shared Groovy Libraries
          Shared libraries for Pipeline scripts.
          2.9
          Pipeline: Stage Step
          Adds the Pipeline step stage to delineate portions of a build.
          2.3
          Pipeline: Stage Tags Metadata
          Library plugin for Pipeline stage tag metadata.
          1.3
          Pipeline: Stage View Plugin
          Pipeline Stage View Plugin.
          2.10
          Pipeline: Step API
          API for asynchronous build step primitive.
          2.15
          Pipeline: Supporting APIs
          Common utility implementations to build Pipeline Plugin
          2.18

          chanti vlad added a comment - - edited By creating a Pipeline job with the content of the ticket description: pipeline { agent none stages { stage( 'Parallel stuff' ) { parallel 'branch 1' : { // Sequencial stages stage( 'Branch 1 stage 1' ){ agent any steps { echo "In branch 1 stage 1" } } stage( 'Branch 1 stage 2' ){ agent none // With that kind of sequencial stage, we can change the agent to run on steps { sleep 30 } } }, 'branch 2' : { // Parallel execution stage( 'Branch 2 stage 1' ){ agent any steps { echo "In branch 2 stage 1" sleep 60 } } } } } } i get following errors:   WorkflowScript: 4: Expected a block for parallel @ line 4, column 5. stage( 'Parallel stuff' ) { ^ WorkflowScript: 4: Expected one of "steps" , "stages" , or "parallel" for stage "Parallel stuff" @ line 4, column 5. stage( 'Parallel stuff' ) { ^ 2 errors i am using Jenkins 2.121.1 + Blue Ocean 1.6.0 +  Pipeline 2.5 + Pipeline Graph Analysis Plugin Provides a REST API to access pipeline and pipeline run data. 1.6 Pipeline implementation for Blue Ocean This plugin is a part of BlueOcean Plugin 1.6.0 Pipeline SCM API for Blue Ocean This plugin is a part of BlueOcean Plugin 1.6.0 Pipeline: API Plugin that defines Pipeline API. 2.28 Pipeline: Basic Steps Commonly used steps for Pipelines. 2.9 Pipeline: Build Step Adds the Pipeline step  build  to trigger builds of other jobs. 2.7 Pipeline: Declarative An opinionated, declarative Pipeline. 1.3 Pipeline: Declarative Agent API Replaced by Pipeline: Declarative Extension Points API plugin. 1.1.1 Pipeline: Declarative Extension Points API APIs for extension points used in Declarative Pipelines. 1.3 Pipeline: GitHub Groovy Libraries Allows Pipeline Grrovy libraries to be loaded on the fly from GitHub. 1.0 Pipeline: Groovy Pipeline execution engine based on continuation passing style transformation of Groovy scripts. 2.53 Pipeline: Input Step Adds the Pipeline step  input  to wait for human input or approval. 2.8 Pipeline: Job Defines a new job type for pipelines and provides their generic user interface. 2.21 Pipeline: Milestone Step Plugin that provides the milestone step 1.3.1 Pipeline: Model API Model API for Declarative Pipeline. 1.3 Pipeline: Multibranch Enhances Pipeline plugin to handle branches better by automatically grouping builds from different branches. 2.19 Pipeline: Nodes and Processes Pipeline steps locking agents and workspaces, and running external processes that may survive a Jenkins restart or slave reconnection. 2.19 Pipeline: REST API Plugin Provides a REST API to access pipeline and pipeline run data. 2.10 Pipeline: SCM Step Adds a Pipeline step to check out or update working sources from various SCMs (version control). 2.6 Pipeline: Shared Groovy Libraries Shared libraries for Pipeline scripts. 2.9 Pipeline: Stage Step Adds the Pipeline step  stage  to delineate portions of a build. 2.3 Pipeline: Stage Tags Metadata Library plugin for Pipeline stage tag metadata. 1.3 Pipeline: Stage View Plugin Pipeline Stage View Plugin. 2.10 Pipeline: Step API API for asynchronous build step primitive. 2.15 Pipeline: Supporting APIs Common utility implementations to build Pipeline Plugin 2.18

          jbriden

          can you please give me an example of why you would set up your pipeline that way? Why not create a sibling stage with nested stages? It seems unnecessarily complex.

          The question you should be asking is "why are we creating arbitrary restrictions ?".

          Restricting actual functionality for the sake of easier visualization in Blue Ocean is not an answer you should find acceptable.

          The fact that you see a pipeline as unnecessarily complex doesn't mean that it is, or that it's wrong, or that it should be prohibited.

          If you're having trouble with presentation, look how TeamCity does it - it can present any pipeline you can imagine, with no issues.

          wknapik wknapik added a comment - jbriden can you please give me an example of why you would set up your pipeline that way? Why not create a sibling stage with nested stages? It seems unnecessarily complex. The question you should be asking is "why are we creating arbitrary restrictions ?". Restricting actual functionality for the sake of easier visualization in Blue Ocean is not an answer you should find acceptable. The fact that you see a pipeline as unnecessarily complex doesn't mean that it is, or that it's wrong, or that it should be prohibited. If you're having trouble with presentation, look how TeamCity does it - it can present any pipeline you can imagine, with no issues.

          Adam Voss added a comment -

          jbriden One use reason is to better control the executing node.

          In my example I have a sequential stage where each stage in the sequence may execute on a different node.  One of those stages that I would like to split into two stages, but can only do so if they execute in the same workspace because the second stage will depend on the local output of the first.  If I could have a nested sequential stage, I could define the agent on the nested sequential stage each of its stages would then share that workspace.

          My exiting alternative would be to stash the outputs form the first stage and unstash them on the 2nd, which (untested) seems like a lot more overhead and complexity than I justify for splitting the stage (especially if I were to split it into more than 2 stages).

          Adam Voss added a comment - jbriden One use reason is to better control the executing node. In my example I have a sequential stage where each stage in the sequence may execute on a different node.  One of those stages that I would like to split into two stages, but can only do so if they execute in the same workspace because the second stage will depend on the local output of the first.  If I could have a nested sequential stage, I could define the agent on the nested sequential stage each of its stages would then share that workspace. My exiting alternative would be to stash the outputs form the first stage and unstash them on the 2nd, which (untested) seems like a lot more overhead and complexity than I justify for splitting the stage (especially if I were to split it into more than 2 stages).

          Does this example works for anyone? 

          Do I need a special version for a special plugin?

          Oliver Santschi added a comment - Does this example works for anyone?  Do I need a special version for a special plugin?

          Leonard Lee added a comment -

          olle71, please see JENKINS-49050. Also, see this gist.

          Leonard Lee added a comment - olle71 , please see JENKINS-49050 . Also, see this gist .

          Hokwang Lee added a comment -

          Please be interested in this JENKINS-53127 related issue.

          Hokwang Lee added a comment - Please be interested in this JENKINS-53127 related issue.

          For what is is worth, I can't figure out if this was done, and if it was, when it was, and what version it is in or how to use it. And also, it seems like if we had the ability to have multiple pipelines for one push, that would help with all of this workload management. I would like to have nested parallelism as well as nested sequence.

           

          Nick Roosevelt added a comment - For what is is worth, I can't figure out if this was done, and if it was, when it was, and what version it is in or how to use it. And also, it seems like if we had the ability to have multiple pipelines for one push, that would help with all of this workload management. I would like to have nested parallelism as well as nested sequence.  

            abayer Andrew Bayer
            banst Bastien Arata
            Votes:
            66 Vote for this issue
            Watchers:
            103 Start watching this issue

              Created:
              Updated:
              Resolved: