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

如何将Jenkins任务结果发布至GitHub Pull Request?

How to Post TestNG Results to GitHub PR from a Successful Fusion/Jenkins Job

Got it, let's walk through how to set this up—this is a workflow I've implemented a few times, so here's what works:

Step 1: Capture TestNG Results in Jenkins

First, make sure Jenkins is parsing your TestNG output. Install the TestNG Plugin for Jenkins if you haven't already, then configure your job to point to the TestNG XML reports (usually in target/surefire-reports for Maven projects).

The plugin will track test stats automatically, but to pull data for your PR comment, you'll need to extract it programmatically. A quick bash snippet with xmllint can grab key metrics:

# Path to your TestNG report
TEST_REPORT_PATH="target/surefire-reports/testng-results.xml"

# Extract core test metrics
TOTAL_TESTS=$(xmllint --xpath 'string(//testng-results/@total)' $TEST_REPORT_PATH)
PASSED_TESTS=$(xmllint --xpath 'string(//testng-results/@passed)' $TEST_REPORT_PATH)
FAILED_TESTS=$(xmllint --xpath 'string(//testng-results/@failed)' $TEST_REPORT_PATH)
SKIPPED_TESTS=$(xmllint --xpath 'string(//testng-results/@skipped)' $TEST_REPORT_PATH)

# Extract names of failed test cases (if any)
FAILED_CASES=$(xmllint --xpath '//test-method[@status="FAIL"]/@name' $TEST_REPORT_PATH | sed 's/ name="/\n- /g' | sed 's/"//g')

Step 2: Format the Comment for GitHub PR

Structure the results into a clean, scannable Markdown comment that reviewers can quickly digest. Here's an example you can build with your extracted variables:

### 🧪 Test Execution Summary (Build #${BUILD_NUMBER})
- **Total Tests**: ${TOTAL_TESTS}
- **Passed**: ${PASSED_TESTS}
- **Failed**: ${FAILED_TESTS}
- **Skipped**: ${SKIPPED_TESTS}

$(if [ ${FAILED_TESTS} -gt 0 ]; then echo "#### ❌ Failed Test Cases:\n${FAILED_CASES}"; else echo "✅ All tests passed!"; fi)

Feel free to add extra details like test duration or a link to the full Jenkins test report (if your team has access to the Jenkins instance).

Step 3: Use GitHub API to Post the Comment

You'll need a GitHub Personal Access Token (PAT) with repo permissions to post comments. Store this token securely in Jenkins' Credentials Manager (as a "Secret Text" credential) instead of hardcoding it.

Add a post-build step in your Jenkins job that runs a curl command to call the GitHub API. Here's a bash example:

# Retrieve GitHub token from Jenkins credentials (adjust the path or use credential binding for Pipelines)
GITHUB_TOKEN=$(cat $JENKINS_HOME/secrets/your-token-credential-id)

# PR number (auto-populated if your job is triggered by GitHub PRs; common variables are CHANGE_ID or ghprbPullId)
PR_NUMBER=${CHANGE_ID}

# Build the comment body
COMMENT_BODY="### 🧪 Test Execution Summary (Build #${BUILD_NUMBER})
- **Total Tests**: ${TOTAL_TESTS}
- **Passed**: ${PASSED_TESTS}
- **Failed**: ${FAILED_TESTS}
- **Skipped**: ${SKIPPED_TESTS}

$(if [ ${FAILED_TESTS} -gt 0 ]; then echo "#### ❌ Failed Test Cases:\n${FAILED_CASES}"; else echo "✅ All tests passed!"; fi)"

# Post the comment to the PR
curl -X POST \
  -H "Authorization: token ${GITHUB_TOKEN}" \
  -H "Content-Type: application/json" \
  "https://api.github.com/repos/your-username/your-repo/issues/${PR_NUMBER}/comments" \
  -d "{\"body\": \"${COMMENT_BODY}\"}"

Step 4: Run Only When the Job Succeeds

Ensure this comment step only executes if the job passes:

  • For freestyle jobs: Wrap your script in a condition in the Execute shell post-build action:
    if [ "${BUILD_STATUS}" = "SUCCESS" ]; then
      # Your comment posting script here
    fi
    
  • For Pipeline jobs: Use the post { success { ... } } block to wrap the API call logic.

Key Tips to Avoid Issues

  • Firewall Access: Make sure your Jenkins server can reach https://api.github.com—configure proxy settings if you're behind a corporate firewall.
  • Credential Safety: Never hardcode your GitHub token; always use Jenkins' credential management to keep it secure.
  • Robust Parsing: Add checks in your script to handle missing TestNG reports (e.g., if tests didn't run at all).
  • PR Number Detection: If your job isn't triggered by GitHub PRs, add a build parameter to let users input the PR number manually.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:49:06