Commit b753d42b authored by liguangyu06's avatar liguangyu06
Browse files

将测试报告默认收件人写入仓库名单,Jenkins 发信时自动带上。

parent e6617b87
def splitEmailAddrs(String raw) {
return (raw ?: '')
.split(/[,;\s]+/)
.collect { it.trim() }
.findAll { it.contains('@') }
}
def loadDefaultReportRecipients() {
def path = 'config/report-email-recipients.txt'
if (!fileExists(path)) {
return []
}
return readFile(encoding: 'UTF-8', file: path)
.split('\n')
.collect { it.trim() }
.findAll { it && !it.startsWith('#') && it.contains('@') }
}
def mergeEmailAddrs(List parts) {
def seen = []
def all = []
parts.flatten().findAll { it }.each { addr ->
def key = addr.toLowerCase()
if (!seen.contains(key)) {
seen.add(key)
all.add(addr)
}
}
return all
}
def sendReportEmail() { def sendReportEmail() {
def to = (params.REPORT_EMAIL_TO ?: '').trim() def extraTo = (params.REPORT_EMAIL_TO ?: '').trim()
if (!to) { if (!extraTo) {
to = (env.REPORT_EMAIL_TO ?: '').trim() extraTo = (env.REPORT_EMAIL_TO ?: '').trim()
} }
def cc = (params.REPORT_EMAIL_CC ?: '').trim() def cc = (params.REPORT_EMAIL_CC ?: '').trim()
if (!cc) { if (!cc) {
cc = (env.REPORT_EMAIL_CC ?: '').trim() cc = (env.REPORT_EMAIL_CC ?: '').trim()
} }
if (!to) { def recipients = mergeEmailAddrs([
echo '未配置 REPORT_EMAIL_TO,跳过邮件。在任务参数或环境变量里填写收件人(逗号分隔)。' loadDefaultReportRecipients(),
splitEmailAddrs(extraTo),
splitEmailAddrs(cc),
])
if (!recipients) {
echo '未配置收件人,跳过邮件。默认名单见 config/report-email-recipients.txt,也可填任务参数 REPORT_EMAIL_TO。'
return return
} }
def to = recipients.join(',')
def subject = fileExists('reports/latest/email-subject.txt') def subject = fileExists('reports/latest/email-subject.txt')
? readFile(encoding: 'UTF-8', file: 'reports/latest/email-subject.txt').trim() ? readFile(encoding: 'UTF-8', file: 'reports/latest/email-subject.txt').trim()
: "【SPD UI自动化】${params.SUITE} ${currentBuild.currentResult} #${env.BUILD_NUMBER}" : "【SPD UI自动化】${params.SUITE} ${currentBuild.currentResult} #${env.BUILD_NUMBER}"
...@@ -20,9 +57,6 @@ def sendReportEmail() { ...@@ -20,9 +57,6 @@ def sendReportEmail() {
<p>测试范围:${params.SUITE}</p> <p>测试范围:${params.SUITE}</p>
<p>Playwright 报告:<a href='${env.BUILD_URL}Playwright_20Report/'>打开 Playwright 报告</a></p> <p>Playwright 报告:<a href='${env.BUILD_URL}Playwright_20Report/'>打开 Playwright 报告</a></p>
<p>Allure 报告:<a href='${env.BUILD_URL}allure'>打开 Allure 报告</a></p>""" <p>Allure 报告:<a href='${env.BUILD_URL}allure'>打开 Allure 报告</a></p>"""
if (cc) {
to = [to, cc].findAll { it }.join(',')
}
if (!fileExists('reports/latest/email-summary.html')) { if (!fileExists('reports/latest/email-summary.html')) {
writeFile encoding: 'UTF-8', file: 'reports/latest/email-summary.html', text: body writeFile encoding: 'UTF-8', file: 'reports/latest/email-summary.html', text: body
} }
...@@ -87,8 +121,8 @@ pipeline { ...@@ -87,8 +121,8 @@ pipeline {
booleanParam(name: 'RUN_FULL', defaultValue: false, description: '包含 @full 全列排序(耗时长)') booleanParam(name: 'RUN_FULL', defaultValue: false, description: '包含 @full 全列排序(耗时长)')
string( string(
name: 'REPORT_EMAIL_TO', name: 'REPORT_EMAIL_TO',
defaultValue: 'liguangyu@sinopharm.com', defaultValue: '',
description: '测试报告收件人(同事邮箱,多个用英文逗号)。留空则读任务环境变量 REPORT_EMAIL_TO;都空则不发信' description: '追加收件人(逗号分隔,可选)。默认名单在 config/report-email-recipients.txt,构建时自动带上'
) )
string(name: 'REPORT_EMAIL_CC', defaultValue: '', description: '抄送,逗号分隔,可选') string(name: 'REPORT_EMAIL_CC', defaultValue: '', description: '抄送,逗号分隔,可选')
} }
......
...@@ -34,7 +34,7 @@ Chromium 缓存在项目内 `.playwright-browsers/`(已 gitignore),与 `@p ...@@ -34,7 +34,7 @@ Chromium 缓存在项目内 `.playwright-browsers/`(已 gitignore),与 `@p
并行默认按 **文件**`PW_WORKERS`)。不要开 `PW_FULLY_PARALLEL=1`:本仓库大量同页 serial,拆开后同一账号会互踩。总浏览器约 `SHARDS × WORKERS`,单机建议不超过 6。详见 [docs/jenkins.md](docs/jenkins.md) 并行默认按 **文件**`PW_WORKERS`)。不要开 `PW_FULLY_PARALLEL=1`:本仓库大量同页 serial,拆开后同一账号会互踩。总浏览器约 `SHARDS × WORKERS`,单机建议不超过 6。详见 [docs/jenkins.md](docs/jenkins.md)
产物在 `reports/latest/`:Playwright HTML、`junit.xml`、Allure results、`summary.json`。定时跑完会发 **HTML 摘要邮件**(测试范围、执行数、成功/失败、通过率、报告链接),不要把完整报告当附件。收件人 `REPORT_EMAIL_TO`,SMTP 与任务拆分见 [docs/jenkins.md](docs/jenkins.md) 产物在 `reports/latest/`:Playwright HTML、`junit.xml`、Allure results、`summary.json`。定时跑完会发 **HTML 摘要邮件**(测试范围、执行数、成功/失败、通过率、报告链接),不要把完整报告当附件。默认收件人 `config/report-email-recipients.txt`,SMTP 与任务拆分见 [docs/jenkins.md](docs/jenkins.md)
Jenkins:仓库根目录 `Jenkinsfile`。逐步配置见 [docs/Jenkins配置指南.md](docs/Jenkins配置指南.md),套件与并行约定见 [docs/jenkins.md](docs/jenkins.md)。凭据 ID 默认 `spd-ui-test-account` Jenkins:仓库根目录 `Jenkinsfile`。逐步配置见 [docs/Jenkins配置指南.md](docs/Jenkins配置指南.md),套件与并行约定见 [docs/jenkins.md](docs/jenkins.md)。凭据 ID 默认 `spd-ui-test-account`
......
# SPD UI 自动化测试报告默认收件人(一行一个,# 开头为注释)
liguangyu@sinopharm.com
xubin11@sinopharm.com
zhouwenjie@sinopharm.com
wangjianmin7@sinopharm.com
wangyufen6@sinopharm.com
jiangshuaijun@sinopharm.com
xiaofeng@sinopharm.com
sujie6@sinopharm.com
18910520617@163.com
972876648@qq.com
535495248@qq.com
jjyin2@126.com
2672152029@qq.com
qizhenjun1@sinopharm.com
guangfeihong@sinopharm.com
xiawenfang@sinopharm.com
liqiuling5@sinopharm.com
zhanghanlong@sinopharm.com
lankeyuyang@sinopharm.com
lvxiaoming1@sinopharm.com
qiaoyi3@sinopharm.com
yangpei10@sinopharm.com
...@@ -125,14 +125,9 @@ git --version ...@@ -125,14 +125,9 @@ git --version
打开任务 `spd-ui-smoke` → 左边 **Configure** 打开任务 `spd-ui-smoke` → 左边 **Configure**
**办法 A(推荐)** **办法 A(推荐)**
勾选 **This project is parameterized**,找到参数 **REPORT_EMAIL_TO**,填: 默认收件人已写在仓库 `config/report-email-recipients.txt`,拉代码后发信会自动带上,不必在每个任务里再贴一遍。
```text 若还要临时多加几个人:勾选 **This project is parameterized**,找到参数 **REPORT_EMAIL_TO**,填追加邮箱(英文逗号分隔,不要用中文逗号)。抄送填 **REPORT_EMAIL_CC**(可空)。
zhangsan@公司.com,lisi@公司.com
```
多个同事用**英文逗号**分隔,不要用中文逗号。
抄送填 **REPORT_EMAIL_CC**(可空)。
**办法 B** **办法 B**
同一配置页找到 **Build Environment** 或最下面环境变量,增加: 同一配置页找到 **Build Environment** 或最下面环境变量,增加:
...@@ -151,7 +146,7 @@ nightly、full 两个任务同样填一份邮箱。 ...@@ -151,7 +146,7 @@ nightly、full 两个任务同样填一份邮箱。
- **Console Output** 里应有:`已发送报告邮件至 ...` - **Console Output** 里应有:`已发送报告邮件至 ...`
- 同事邮箱主题类似:`【SPD UI自动化】smoke 通过 12/12 #3` - 同事邮箱主题类似:`【SPD UI自动化】smoke 通过 12/12 #3`
若日志写「未配置 REPORT_EMAIL_TO,跳过邮件」:第 5.3 步没填上或没保存 若日志写「未配置收件人,跳过邮件」:确认仓库里有 `config/report-email-recipients.txt`,或任务参数里填了追加邮箱
--- ---
...@@ -163,7 +158,7 @@ nightly、full 两个任务同样填一份邮箱。 ...@@ -163,7 +158,7 @@ nightly、full 两个任务同样填一份邮箱。
| git 不是内部命令 | 没装 Git | | git 不是内部命令 | 没装 Git |
| Authentication failed | GitLab 凭据错了 | | Authentication failed | GitLab 凭据错了 |
| spd-ui-test-account not found | 第二个凭据 ID 写错了 | | spd-ui-test-account not found | 第二个凭据 ID 写错了 |
| 未配置 REPORT_EMAIL_TO,跳过邮件 | 任务参数 REPORT_EMAIL_TO 没填同事邮箱 | | 未配置收件人,跳过邮件 | 仓库里没有 `config/report-email-recipients.txt`,参数也没填 |
| 邮件发送失败 / Email Extension | 没装插件,或系统配置里 SMTP 不通 | | 邮件发送失败 / Email Extension | 没装插件,或系统配置里 SMTP 不通 |
不要在「自由风格 → Execute Windows batch command」里贴命令。那种方式和仓库 `Jenkinsfile` 不是同一条路。 不要在「自由风格 → Execute Windows batch command」里贴命令。那种方式和仓库 `Jenkinsfile` 不是同一条路。
...@@ -124,13 +124,15 @@ Default user e-mail suffix: @公司域名 ...@@ -124,13 +124,15 @@ Default user e-mail suffix: @公司域名
### 2. 收件人 ### 2. 收件人
任选其一(参数优先): 默认名单在仓库 `config/report-email-recipients.txt`(一行一个邮箱),Jenkins 发信时自动带上,改名单只需改这个文件并推送。
- 任务参数 `REPORT_EMAIL_TO``leader@公司.com, qa-all@公司.com` 还可追加:
- 或任务环境变量 `REPORT_EMAIL_TO`(多人共用同一 Job 时更合适)
- 任务参数 `REPORT_EMAIL_TO`:临时多加的同事邮箱,逗号分隔
- 或任务环境变量 `REPORT_EMAIL_TO`
- 抄送:`REPORT_EMAIL_CC` - 抄送:`REPORT_EMAIL_CC`
都为空则 **不发信**(避免本地/调试构建刷爆邮箱)`post` 里失败不会把构建标红,日志会写「跳过邮件」或 SMTP 错误。 文件、参数、抄送都会去重合并。全都空则 **不发信**`post` 里失败不会把构建标红,日志会写「跳过邮件」或 SMTP 错误。
### 3. 领导看到什么 ### 3. 领导看到什么
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment