Commit b28ebabe b28ebabef7b8676e800ed594984f70278f9adeff by chenjing

修复:使用Jenkins BUILD_URL生成正确的报告链接

1 parent e012e8a0
...@@ -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 # 返回退出码
......