修复:使用Jenkins BUILD_URL生成正确的报告链接
Showing
3 changed files
with
41 additions
and
21 deletions
| ... | @@ -56,14 +56,17 @@ pipeline { | ... | @@ -56,14 +56,17 @@ pipeline { |
| 56 | env.IP_HOST = ipHost | 56 | env.IP_HOST = ipHost |
| 57 | echo "IP_HOST: ${env.IP_HOST}" | 57 | echo "IP_HOST: ${env.IP_HOST}" |
| 58 | } | 58 | } |
| 59 | sh ''' | 59 | // 使用 catchError 让测试失败时也继续执行后续阶段 |
| 60 | . venv/bin/activate | 60 | catchError(buildResult: 'FAILURE', stageResult: 'UNSTABLE') { |
| 61 | export DEPLOY_ENV="${DEPLOY_ENV}" | 61 | sh ''' |
| 62 | export IP_HOST="${IP_HOST}" | 62 | . venv/bin/activate |
| 63 | echo "当前执行环境: ${DEPLOY_ENV}" | 63 | export DEPLOY_ENV="${DEPLOY_ENV}" |
| 64 | echo "IP_HOST: ${IP_HOST}" | 64 | export IP_HOST="${IP_HOST}" |
| 65 | python3 api_test.py | 65 | echo "当前执行环境: ${DEPLOY_ENV}" |
| 66 | ''' | 66 | echo "IP_HOST: ${IP_HOST}" |
| 67 | python3 api_test.py | ||
| 68 | ''' | ||
| 69 | } | ||
| 67 | } | 70 | } |
| 68 | } | 71 | } |
| 69 | 72 | ||
| ... | @@ -72,7 +75,11 @@ pipeline { | ... | @@ -72,7 +75,11 @@ pipeline { |
| 72 | echo "正在生成测试报告..." | 75 | echo "正在生成测试报告..." |
| 73 | sh ''' | 76 | sh ''' |
| 74 | echo "查找报告文件..." | 77 | echo "查找报告文件..." |
| 75 | ls -lh reports/${DEPLOY_ENV}/ 2>/dev/null || echo "未找到报告文件" | 78 | if [ -d "reports/${DEPLOY_ENV}" ]; then |
| 79 | ls -lh reports/${DEPLOY_ENV}/ | ||
| 80 | else | ||
| 81 | echo "未找到报告目录: reports/${DEPLOY_ENV}/" | ||
| 82 | fi | ||
| 76 | ''' | 83 | ''' |
| 77 | } | 84 | } |
| 78 | } | 85 | } |
| ... | @@ -82,6 +89,16 @@ pipeline { | ... | @@ -82,6 +89,16 @@ pipeline { |
| 82 | always { | 89 | always { |
| 83 | echo "正在收集测试结果..." | 90 | echo "正在收集测试结果..." |
| 84 | 91 | ||
| 92 | // 调试信息:打印环境变量 | ||
| 93 | sh ''' | ||
| 94 | echo "=== Jenkins 环境变量调试信息 ===" | ||
| 95 | echo "JENKINS_URL: ${JENKINS_URL}" | ||
| 96 | echo "JOB_NAME: ${JOB_NAME}" | ||
| 97 | echo "BUILD_NUMBER: ${BUILD_NUMBER}" | ||
| 98 | echo "BUILD_URL: ${BUILD_URL}" | ||
| 99 | echo "===============================" | ||
| 100 | ''' | ||
| 101 | |||
| 85 | // 列出所有报告文件(调试用) | 102 | // 列出所有报告文件(调试用) |
| 86 | sh ''' | 103 | sh ''' |
| 87 | echo "=== 报告文件清单 ===" | 104 | echo "=== 报告文件清单 ===" | ... | ... |
No preview for this file type
| ... | @@ -7,10 +7,11 @@ | ... | @@ -7,10 +7,11 @@ |
| 7 | import requests | 7 | import requests |
| 8 | import json | 8 | import json |
| 9 | import sys | 9 | import sys |
| 10 | import re | ||
| 10 | from datetime import datetime | 11 | from datetime import datetime |
| 11 | import os | 12 | import os |
| 12 | 13 | ||
| 13 | def send_wecom_notification(webhook_url, env_name, build_status, build_number, job_name, jenkins_url): | 14 | def send_wecom_notification(webhook_url, env_name, build_status, build_url): |
| 14 | """ | 15 | """ |
| 15 | 发送企微群通知 | 16 | 发送企微群通知 |
| 16 | 17 | ||
| ... | @@ -18,13 +19,15 @@ def send_wecom_notification(webhook_url, env_name, build_status, build_number, j | ... | @@ -18,13 +19,15 @@ def send_wecom_notification(webhook_url, env_name, build_status, build_number, j |
| 18 | webhook_url: 企微群webhook URL | 19 | webhook_url: 企微群webhook URL |
| 19 | env_name: 运行环境 (test/uat/prod) | 20 | env_name: 运行环境 (test/uat/prod) |
| 20 | build_status: 构建状态 ('success' 或 'failure') | 21 | build_status: 构建状态 ('success' 或 'failure') |
| 21 | build_number: Jenkins构建号 | 22 | build_url: Jenkins完整的构建URL (格式: http://jenkins/job/xxx/123/) |
| 22 | job_name: Jenkins任务名称 | ||
| 23 | jenkins_url: Jenkins服务器地址 | ||
| 24 | """ | 23 | """ |
| 25 | 24 | ||
| 26 | # 构建报告链接 | 25 | # 构建报告链接 - BUILD_URL通常以/结尾,直接拼接 |
| 27 | report_url = f"{jenkins_url}/job/{job_name}/{build_number}/artifact/reports/{env_name}/" | 26 | report_url = f"{build_url}artifact/reports/{env_name}/" |
| 27 | |||
| 28 | # 从BUILD_URL中提取构建号 (格式: http://jenkins/.../123/) | ||
| 29 | match = re.search(r'/(\d+)/?$', build_url.rstrip('/')) | ||
| 30 | build_number = match.group(1) if match else 'unknown' | ||
| 28 | 31 | ||
| 29 | # 根据状态构建消息 | 32 | # 根据状态构建消息 |
| 30 | if build_status == 'success': | 33 | if build_status == 'success': |
| ... | @@ -97,23 +100,23 @@ if __name__ == "__main__": | ... | @@ -97,23 +100,23 @@ if __name__ == "__main__": |
| 97 | webhook_url = os.getenv('WECOM_WEBHOOK_URL') | 100 | webhook_url = os.getenv('WECOM_WEBHOOK_URL') |
| 98 | env_name = os.getenv('DEPLOY_ENV', 'test') | 101 | env_name = os.getenv('DEPLOY_ENV', 'test') |
| 99 | build_status = os.getenv('BUILD_STATUS', 'success') | 102 | build_status = os.getenv('BUILD_STATUS', 'success') |
| 100 | build_number = os.getenv('BUILD_NUMBER', 'unknown') | 103 | build_url = os.getenv('BUILD_URL') |
| 101 | job_name = os.getenv('JOB_NAME', 'api_test') | ||
| 102 | jenkins_url = os.getenv('JENKINS_URL', '').rstrip('/') or 'http://localhost:8080' | ||
| 103 | 104 | ||
| 104 | # 验证必需参数 | 105 | # 验证必需参数 |
| 105 | if not webhook_url: | 106 | if not webhook_url: |
| 106 | print("❌ 错误: 未设置 WECOM_WEBHOOK_URL 环境变量") | 107 | print("❌ 错误: 未设置 WECOM_WEBHOOK_URL 环境变量") |
| 107 | sys.exit(1) | 108 | sys.exit(1) |
| 108 | 109 | ||
| 110 | if not build_url: | ||
| 111 | print("❌ 错误: 未设置 BUILD_URL 环境变量") | ||
| 112 | sys.exit(1) | ||
| 113 | |||
| 109 | # 发送通知 | 114 | # 发送通知 |
| 110 | success = send_wecom_notification( | 115 | success = send_wecom_notification( |
| 111 | webhook_url=webhook_url, | 116 | webhook_url=webhook_url, |
| 112 | env_name=env_name, | 117 | env_name=env_name, |
| 113 | build_status=build_status, | 118 | build_status=build_status, |
| 114 | build_number=build_number, | 119 | build_url=build_url |
| 115 | job_name=job_name, | ||
| 116 | jenkins_url=jenkins_url | ||
| 117 | ) | 120 | ) |
| 118 | 121 | ||
| 119 | # 返回退出码 | 122 | # 返回退出码 | ... | ... |
-
Please register or sign in to post a comment