如何并行化Jenkins流水线中的各个阶段?

vddsk6oq  于 2022-11-21  发布在  Jenkins
关注(0)|答案(1)|浏览(188)

我有下面的管道,我需要并行化javadoc的生成和发布,以及集成测试报告的执行和发布。

我正在尝试以下方法,但流水线似乎没有并行化。

stage('Generate and Publish Javadoc, Run and publish Integration Tests, Run and publish Mutation Tests') {
        parallel {
            stage('javadoc'){
                stages{
                    stage('Generate and publish Javadoc on Linux') {
                        when { expression { env.OS == 'UNIX' }}
                        steps {
                            dir('') {
                                sh './gradlew javadoc'
                                javadoc javadocDir: 'build/docs/javadoc', keepAll: true
                            }
                        }
                    }
            
                    stage('Generate and publish Javadoc on Windows') {
                        when { expression { env.OS == 'BAT' }}
                        steps {
                            dir('') {
                                bat 'gradlew.bat javadoc'
                                javadoc javadocDir: 'build/docs/javadoc', keepAll: true
                            }
                        }
                    }
                }
            }

            stage('integration test'){
                stages{
                    stage('Integration Tests on Linux') {
                        when { expression { env.OS == 'UNIX' }}
                        steps {
                            dir('') {
                                sh './gradlew integrationTest'
                                junit '**/build/test-results/integrationTest/*.xml'
                            }
                        }
                    }

                    stage('Integration Tests on Windows') {
                        when { expression { env.OS == 'BAT' }}
                            steps {
                                dir('') {
                                    bat 'gradlew.bat integrationTest'
                                    junit '**/build/test-results/integrationTest/*.xml'
                                }
                            }
                    }
                    
                    stage('Publish Integration Tests Report') {
                        steps {
                            dir('') {
                                publishHTML(target: [allowMissing         : false,
                                                    alwaysLinkToLastBuild: false,
                                                    keepAll              : true,
                                                    reportDir            : 'build/reports/tests/integrationTest',
                                                    reportFiles          : 'index.html',
                                                    reportName           : 'Integration Tests Report'])
                                }
                        }
                    }
                }
            }
        }
    }

下面的代码使用了标签parallel,并且在它里面有一个stage,stage里面有多个stage。

tyg4sfes

tyg4sfes1#

因此,我希望标记parallel只识别最外部的阶段。
不,Jenkins应该也能识别嵌套的阶段。我使用了与您所拥有的类似的管道结构,管道分支为三个部分,每个部分包含多个阶段。
就我所见,你的管道语法没有问题,它的阶段和步骤与我在管道中使用的阶段和步骤几乎相同。您确定管道不是并行运行的吗?使用类似于Jenkins的蓝海视图应该有助于您正确地可视化这些步骤。如果这些步骤不是并行运行的,它们是按顺序运行的吗?

相关问题