Jenkins声明式Pipeline中合并两个Allure测试结果的问题排查
问题分析与修正方案
你当前配置的核心错误
- 结果路径不匹配:你在
merged-allure-results目录下unstash两个测试阶段的结果后,实际的测试结果文件会被存放在merged-allure-results/allure-results子目录中,但Allure插件配置的results.path指向的是merged-allure-results,插件无法找到结果文件,导致报告生成失败。 - 同名文件覆盖风险:两个阶段生成的
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
相关产品推荐
相关产品推荐

