You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins声明式Pipeline中合并两个Allure测试结果的问题排查

问题分析与修正方案

你当前配置的核心错误

  1. 结果路径不匹配:你在merged-allure-results目录下unstash两个测试阶段的结果后,实际的测试结果文件会被存放在merged-allure-results/allure-results子目录中,但Allure插件配置的results.path指向的是merged-allure-results,插件无法找到结果文件,导致报告生成失败。
  2. 同名文件覆盖风险:两个阶段生成的allure-results/history目录下的趋势、历史数据文件,会在unstash时互相覆盖,导致报告丢失部分关键信息。

修正方案一:快速修复路径问题

直接调整Allure插件的结果路径,指向实际存放结果的子目录,适合不需要完整保留历史趋势的场景:

agent none

    stages {
        stage('Sanity') {
            agent { label 'sanity-node' }
            steps {
                sh 'pytest -m sanity'
                stash name: 'sanity-results', includes: 'allure-results/**'
            }
        }
        stage('Regression') {
            agent { label 'regression-node' }
            steps {
                sh 'pytest -m regression'
                stash name: 'regression-results', includes: 'allure-results/**'
            }
        }
    }

    post {
        always {
            node('master') {
                dir('merged-allure-results') {
                    unstash 'sanity-results'
                    unstash 'regression-results'
                }

                allure([
                    includeProperties: false,
                    jdk: '',
                    properties: [],
                    reportBuildPolicy: 'ALWAYS',
                    // 修改路径为实际结果文件所在的子目录
                    results: [[path: 'merged-allure-results/allure-results']]
                ])
            }
        }
    }
}

修正方案二:完整合并结果(含历史趋势)

通过临时目录处理历史文件的合并,避免覆盖,同时让结果文件直接存放在目标目录,适合需要完整报告的场景:

agent none

    stages {
        stage('Sanity') {
            agent { label 'sanity-node' }
            steps {
                sh 'pytest -m sanity'
                // 仅stash结果文件,不带allure-results目录结构
                stash name: 'sanity-results', includes: 'allure-results/*'
            }
        }
        stage('Regression') {
            agent { label 'regression-node' }
            steps {
                sh 'pytest -m regression'
                stash name: 'regression-results', includes: 'allure-results/*'
            }
        }
    }

    post {
        always {
            node('master') {
                dir('merged-allure-results') {
                    // 先释放Sanity阶段的结果
                    unstash 'sanity-results'
                    // 临时目录处理Regression结果,避免覆盖历史数据
                    dir('temp-regression') {
                        unstash 'regression-results'
                        // 合并history目录(保留趋势数据)
                        sh '''
                            if [ -d "history" ]; then
                                cp -r history/* ../history/ || true
                            fi
                            // 将其他结果文件移动到合并目录
                            mv !(history) ../
                        '''
                    }
                    // 删除临时目录
                    deleteDir('temp-regression')
                }

                allure([
                    includeProperties: false,
                    jdk: '',
                    properties: [],
                    reportBuildPolicy: 'ALWAYS',
                    results: [[path: 'merged-allure-results']]
                ])
            }
        }
    }
}

额外注意事项

  • 确保Jenkins已安装Allure插件,且所有执行测试的节点都配置了Allure命令行工具。
  • 若测试生成的结果文件有重名(非history目录下的文件),需检查pytest的Allure配置,确保每个测试用例生成唯一的结果文件。

内容的提问来源于stack exchange,提问作者Bijesh Mohan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 08:10:26