Parallel stage in Jenkinsfile

Reference: https://github.com/vigneshsweekaran/hello-world

Defining parallel stage in Jenkinsfile without the agent block in stage’s. If the stages are not defined with agent block and if it is in parallel block, all the stages will be executed paralley in the same agent where the job is running

pipeline {
    agent any
    tools {
        maven 'maven-3.6.3'
    }
    environment {
        DATE = new Date().format('yy.M')
        TAG = "${DATE}.${BUILD_NUMBER}"
    }
    stages {
        stage ('Check maven version') {
            steps {
                sh 'mvn --version'
                println(TAG)
            }
        }
        stage ('Generating Package') {
            parallel {
                stage ('Generate package for app1') {
                    steps {
                        dir ('app1') {
                            sh 'sleep 120' 
                            sh 'mvn clean package'
                        }
                    }
                }
                stage ('Generate package for app2') {
                    steps {
                        dir ('app2') {
                            sh 'sleep 120'
                            sh 'mvn clean package'
                        }
                    }
                }
                stage ('Generate package for app3') {
                    steps {
                        dir ('app3') {
                            sh 'sleep 120'
                            sh 'mvn clean package'
                        }
                    }
                }
            }
        }
    }
}

Defining parallel stage in Jenkinsfile with the agent block per stage. Each stage will executed paralley in a separate agent.

pipeline {
    agent any
    tools {
        maven 'maven-3.6.3'
    }
    environment {
        DATE = new Date().format('yy.M')
        TAG = "${DATE}.${BUILD_NUMBER}"
    }
    stages {
        stage ('Check maven version') {
            steps {
                sh 'mvn --version'
                println(TAG)
            }
        }
        stage ('Generating Package') {
            parallel {
                stage ('Generate package for app1') {
                    agent {
                        label "ubuntu1"
                    }
                    steps {
                        dir ('app1') {
                            sh 'mvn clean package'
                        }
                    }
                }
                stage ('Generate package for app2') {
                    agent {
                        label "ubuntu1"
                    }
                    steps {
                        dir ('app2') {
                            sh 'mvn clean package'
                        }
                    }
                }
                stage ('Generate package for app3') {
                    agent {
                        label "ubuntu1"
                    }
                    steps {
                        dir ('app3') {
                            sh 'mvn clean package'
                        }
                    }
                }
            }
        }
    }
}