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

Allow sequential stages inside parallel in Declarative syntax

    XMLWordPrintable

Details

    • Pipeline - April 2018

    Description

      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:

      Attachments

        Issue Links

          Activity

            abayer Andrew Bayer added a comment -

            So this is on the longer-term roadmap. I'm not sure yet what the syntax will look like, but the necessary tooling in Blue Ocean to support this sort of visualization is beginning to come together. So hopefully we'll be able to get this in a few months.

            abayer Andrew Bayer added a comment - So this is on the longer-term roadmap. I'm not sure yet what the syntax will look like, but the necessary tooling in Blue Ocean to support this sort of visualization is beginning to come together. So hopefully we'll be able to get this in a few months.
            banst 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 ?

            banst 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 ?
            abayer Andrew Bayer added a comment -

            This one, I guess. =)

            abayer Andrew Bayer added a comment - This one, I guess. =)
            banst Bastien Arata added a comment -

            Ok then =)

            banst Bastien Arata added a comment - Ok then =)
            abayer 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)

            abayer 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 )
            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.

             

            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.  
            abayer 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.

            abayer 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.
            abayer 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.

            abayer 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.
            michaelneale 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. 

            michaelneale 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. 
            abayer Andrew Bayer added a comment -

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

            abayer Andrew Bayer added a comment - Not sure what you mean? The syntax examples are all above.
            abayer 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.

            abayer 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.
            abayer 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.

            abayer 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.
            michaelneale 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? 

            michaelneale 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? 
            abayer 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.

            abayer 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.
            abayer 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.

            abayer 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.
            abayer 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.

            abayer 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'
                  }
                }
              }
            }
            hendrikhalkow 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.

            sheerun 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.  

            thxmasj 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.  
            abayer 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.

            abayer 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?

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

            No - I'll open one. =)

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

            And done - JENKINS-49050

            abayer Andrew Bayer added a comment - And done - JENKINS-49050
            michaelneale Michael Neale added a comment -

            Cool. 

             

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

            michaelneale 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_issue_link 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
            abayer 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 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.

            danielresolutiongames 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?

            rachitagrawal 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_issue_link 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_issue_link 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_issue_link 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_issue_link 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_issue_link 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?

            rachitagrawal Rachit Agrawal added a comment - I see there are multiple PRs raised. Is it available now? Anyway we can use this functionality?
            dineshk7 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?. 

            dineshk7 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?. 
            horangs Hokwang Lee added a comment -

            I am waitting this fix.

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

            horangs Me too.

            rachitagrawal 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.

            thxmasj 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.

            richardwhiuk 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.
            abayer Andrew Bayer added a comment -

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

            abayer Andrew Bayer added a comment - Yup, that sounds about right - very sorry for the delays!
            abayer 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).

            abayer 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).
            dineshk7 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
            abayer 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 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

            dineshk7 Dineshkumar Ayyavoo added a comment - abayer gr8 then. thanks
            horangs 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.

            horangs 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.
            nimrod Kasia Gauza added a comment -

            Will the functionality will also be available in scripted pipelines?

            nimrod Kasia Gauza added a comment - Will the functionality will also be available in scripted pipelines?
            abayer 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.

            abayer 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.
            richardwhiuk 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.

            richardwhiuk 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.
            abayer 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.

            abayer 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.
            bitwiseman 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?  

             

            bitwiseman 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?    
            jbriden 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.)

            jbriden 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.)
            chantivlad 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
            chantivlad 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 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.
            adamvoss 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).

            adamvoss 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?

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

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

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

            Please be interested in this JENKINS-53127 related issue.

            horangs 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.

             

            nroose 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.  

            People

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

              Dates

                Created:
                Updated:
                Resolved: