GitHub Actions矩阵步骤后合并测试工件并上传至Jira Xray
拆分单元测试矩阵并合并报告上传Xray方案
核心思路
把单元测试拆分为矩阵任务并行执行,每个任务生成独立测试报告并上传为临时工件,最后新增一个汇总任务,下载所有矩阵任务的报告后统一上传至Xray。
1. 改造单元测试为矩阵任务
将原unit-test任务改成矩阵结构,每个矩阵节点运行拆分后的测试块,完成后上传自身生成的报告:
unit-test: runs-on: ubuntu-latest needs: setup strategy: matrix: step: ${{ fromJson(needs.setup.outputs.test-bins) }} # 对应拆分的测试块,格式和lint-bins一致,比如[1,2,3,4] steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - uses: actions/cache@v3 with: path: ${{ env.CACHE_NODE_MODULES_PATH }} key: build-${{ hashFiles('**/package-lock.json') }} # 运行拆分后的单元测试,确保脚本能按step生成独立报告(比如文件名带step编号或单独子目录) - run: node scripts/ci-run-many.mjs --target=test --outputTarget=execute --partNumber=${{ matrix.step }} --base=${{ env.BASE_REF}} --head=HEAD # 上传当前节点的测试报告,用step编号命名工件避免冲突 - name: Upload test reports if: success() || failure() # 无论测试成功失败都上传报告 uses: actions/upload-artifact@v3 with: name: test-reports-${{ matrix.step }} path: reports/**/test-*.xml retention-days: 1 # 临时存储,用完即删
2. 新增报告汇总与Xray上传任务
创建独立任务等待所有矩阵测试完成,下载所有报告后统一上传:
unit-test-upload-xray: runs-on: ubuntu-latest needs: unit-test # 等待所有矩阵测试节点执行完毕 if: github.event_name == 'push' # 仅在push事件触发上传,和原逻辑一致 steps: # 下载所有矩阵节点上传的报告到统一目录 - name: Download all test reports uses: actions/download-artifact@v3 with: path: all-test-reports # 检查是否存在有效报告文件 - name: Check report existence id: check_files uses: andstor/file-existence-action@v1 with: files: 'all-test-reports/**/test-*.xml' # 统一上传所有报告到Xray - name: Import results to Xray if: (success() || failure()) && steps.check_files.outputs.files_exists == 'true' uses: mikepenz/xray-action@v2 with: username: ${{ secrets.XRAY_CLIENT_ID }} password: ${{ secrets.XRAY_CLIENT_SECRET }} testFormat: 'junit' testPaths: 'all-test-reports/**/test-*.xml' # 指向所有下载的报告文件 projectKey: 'MY_KEY' combineInSingleTestExec: true
关键注意事项
- 确保
setup任务输出的test-bins和lint-bins逻辑一致,能正确拆分测试块数量 - 测试脚本
ci-run-many.mjs处理test目标时,要保证每个step生成的报告路径/文件名不冲突(比如在报告名里加入-${{ matrix.step }}标识) - 工件保留天数设为1,避免冗余存储临时文件
- 保留了原逻辑中“无论测试成功失败都上传报告”的行为,确保Xray能完整捕获测试结果
内容的提问来源于stack exchange,提问作者cuddlemeister
相关产品推荐
相关产品推荐

