简体   繁体   中英

Is it possible to run multiple stages with their respective steps in parallel in a Jenkins Pipeline?

I searched and experimented a lot, but couldn't find any working example of what I need.

I want to run 2 stages in parallel, each stage has several steps. And by parallel I mean the stages themselves and their respective steps. All existing examples and topics I found relate to executing steps in parallel inside a stage .

I don't need that, I need to run 2 stages alongside their steps in parallel. Please look at this screenshot:

在此处输入图像描述

Current behavior is that Parent Stage 1 is executed and then Parent Stage 2 starts to execute.

Is it possible to run "Parent Stage 1" and "Parent Stage 2" in parallel?

You can use stages inside the parallel block. eg

pipeline {
    agent any
    stages {
        stage('Non Parallel Execution') {
            steps {
                 sh 'echo step 1a'
                 sh 'echo step 2a'
                 sh 'echo step 3a'
            }
        }
        stage('Parallel Execution') {
            parallel {
                 stage('Parent A') {
                    steps {
                        sh 'echo step 1'
                        sh 'echo step 2'
                    }
                }
                stage('Parent B') {
                    steps {
                        sh 'echo step 3'
                        sh 'echo step 4'
                    }
                }
            }
        }
    }
}

src: https://jenkins.io/doc/book/pipeline/syntax/#parallel

If you're trying to have nested parallel execution instead, I'd suggest to read the answers to this question: Error: The parallel step can only be used as the only top-level step

The answer of @stefano is correct - use stages inside parallel although he didn't use it in his example. here is what I did:

pipeline {
  agent { node {
    label 'you node'
  }}
  stages {
    stage ("Run Tests"){
      parallel {
        stage ("Run Parent 1 stages") {
          stages {
            stage("Parent 1 Stage 1") {
              steps {
                echo "Parent 1 stage 1"
              }
            }
            stage("Parent 1 stage 2") {
              steps {
                  echo  "Parent 1 stage 2"
              }
            }
            stage("Parent 1 stage 3") {
              steps {
                echo "Parent 1 stage 3"
              }
            }  
          }
        }
        stage ("Run Parent 2 stages") {
          stages {
            stage("Parent 2 stage 1") {
              steps {
                echo "Parent 2 stage 1"
              }
            }
          }
        }
      }
    }
  }
}

and you will get this pipeline: 在此处输入图像描述

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM