GitHub Actions中如何将coverage报告写入日志或汇总页面?
解决GitHub Actions中远程覆盖率报告的日志/汇总展示问题
核心问题分析
你当前的写法存在两个关键问题:
- 在
ssh-action的远程脚本中使用>> $GITHUB_OUTPUT无效,因为$GITHUB_OUTPUT是GitHub Actions Runner的环境变量,远程服务器无法访问这个变量。 pmeier/pytest-results-action的path指向远程服务器路径,若self-hosted Runner不是目标服务器,Runner无法读取该文件。
方案1:直接在日志中显示覆盖率报告
这是最简单的方式,ssh-action会将远程命令的输出同步到GitHub Actions日志中,只需确保远程的cat coverage-report.txt能正常执行:
修改第一个ssh-action的脚本部分:
script: | cd /my-api rm -f /my-api/test-results.xml ssh-agent bash -c 'ssh-add /root/.ssh/pubkey; git pull origin master' sudo mkdir -p /my-api sudo chown -R $USER:$USER /my-api systemctl stop my-api pytest --junit-xml=test-results.xml generated_tests.py coverage run -m pytest generated_tests.py coverage report > coverage-report.txt # 验证文件存在并强制输出 ls -l /my-api/coverage-report.txt cat /my-api/coverage-report.txt systemctl start my-api
执行后,覆盖率内容会直接出现在该步骤的GitHub Actions日志里。
方案2:在Job Summary页面展示覆盖率报告
如果想在Actions的Summary标签页(顶部汇总区)展示格式化的覆盖率报告,需要先把远程文件下载到Runner,再写入Job Summary:
- 添加下载远程覆盖率文件的步骤:
- name: Download coverage report to Runner uses: appleboy/scp-action@v0.1.7 with: host: <IP addr> username: ${{ secrets.USERNAME }} key: ${{ secrets.SSH_KEY }} port: 22 source: "/my-api/coverage-report.txt" target: "./"
- 将覆盖率内容写入Job Summary:
- name: Add coverage to Job Summary run: | echo "## 项目覆盖率报告" >> $GITHUB_STEP_SUMMARY echo "\`\`\`text" >> $GITHUB_STEP_SUMMARY cat coverage-report.txt >> $GITHUB_STEP_SUMMARY echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
执行完成后,打开Actions的Summary页面就能看到格式化的覆盖率文本块。
附带:修复测试结果展示问题
同样需要先下载远程的测试结果文件到Runner,再使用测试结果插件:
- name: Download test results to Runner uses: appleboy/scp-action@v0.1.7 with: host: <IP addr> username: ${{ secrets.USERNAME }} key: ${{ secrets.SSH_KEY }} port: 22 source: "/my-api/test-results.xml" target: "./" - name: Surface failing tests if: always() uses: pmeier/pytest-results-action@main with: path: ./test-results.xml summary: true fail-on-empty: true title: Test results
内容的提问来源于stack exchange,提问作者Yee Bee
相关产品推荐
相关产品推荐

