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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 02:54:34