如何在詹金斯并行管道中汇总测试结果?

Sve*_*ven 1 jenkins jenkins-pipeline

我有一个Jenkinsfile用于并行测试执行的定义,任务是从这两者中获取测试结果,以便在post某个地方的一步中对其进行处理。

问题是:该怎么做?搜索作为一个示例代码什么不会带来任何东西-无论是例子处理解释parallel,或者他们解释post用junit。

pipeline {
    agent { node { label 'swarm' } }

    stages {
        stage('Testing') {
            parallel {
                stage('Unittest') {
                    agent { node { label 'swarm' } }

                    steps {
                        sh 'unittest.sh'
                    }
                }

                stage ('Integrationtest') {
                    agent { node { label 'swarm' } }

                    steps {
                        sh 'integrationtest.sh'
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

post {always{junit(...)}}在两个并行阶段都定义了一个步骤,BlueOcean GUI产生了积极的反应,但是测试报告记录的测试量接近两倍-非常奇怪,某些文件必须被扫描两次。将这一post步骤添加到周围的“测试”阶段会产生错误。

我缺少一个示例,该示例详细说明了如何对parallel块中创建的测试结果进行后处理。

Sve*_*ven 9

只是为了记录我的互联网解决方案:

我想出了将测试结果存储在两个并行步骤中的方法,并添加了最后一个步骤来对文件进行隐藏post处理,然后对它们进行处理:

pipeline {
    agent { node { label 'swarm' } }

    stages {
        stage('Testing') {
            parallel {
                stage('Unittest') {
                    agent { node { label 'swarm' } }

                    steps {
                        sh 'rm build/*'
                        sh 'unittest.sh'
                    }
                    post {
                        always {
                            stash includes: 'build/**', name: 'testresult-unittest'
                        }
                    }

                }

                stage ('Integrationtest') {
                    agent { node { label 'swarm' } }

                    steps {
                        sh 'rm build/*'
                        sh 'integrationtest.sh'
                    }

                    post {
                        always {
                            stash includes: 'build/**', name: 'testresult-integrationtest'
                        }
                    }
                }
            }
        }

        stage('Reporting') {
            steps {
                unstash 'testresult-unittest'
                unstash 'testresult-integrationtest'
            }

            post {
                always {
                    junit 'build/*.xml'
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我的观察是您必须注意清理工作空间:两个测试阶段都确实创建了一个文件,但是在第二次运行中,两个工作空间都继承自上次运行,并且先前创建的两个测试结果都出现在build目录中。

因此,在开始新的运行之前,您必须删除测试结果的所有剩余部分,否则您将在“其他”阶段隐藏测试结果的旧版本。我不知道是否有更好的方法可以做到这一点。