如何通过Jenkins发送Jacoco代码覆盖率报告至邮箱?
Jenkins发送Jacoco覆盖率报告/摘要的实现方案
针对你的需求,有几种成熟的实现方式,从插件到自定义脚本都有,具体如下:
一、用Jenkins插件快速实现
1. Email Extension Plugin(邮件扩展插件)
这是最常用的邮件通知工具,完全支持自定义邮件内容,能嵌入覆盖率数据或直接附加完整报告:
- 安装插件后,在任务的「构建后操作」里添加「Editable Email Notification」。
- 内容类型选HTML,方便排版展示覆盖率摘要。
- 直接引用Jacoco插件暴露的环境变量填充内容,比如
*${JACOCO_LINE_COVERAGE}%*(行覆盖率)、*${JACOCO_BRANCH_COVERAGE}%*(分支覆盖率)。 - 如果要附完整报告,在「Attachments」里填Jacoco报告的路径,比如
**/target/site/jacoco/**。
2. Slack Notification Plugin(适合Slack团队)
如果团队日常用Slack沟通,这个插件可以把覆盖率摘要推送到指定频道:
- 构建后操作里添加Slack通知,自定义消息内容,插入覆盖率指标,还能附上Jenkins上报告的直接链接。
3. Jacoco Plugin本身的变量支持
Jacoco Jenkins插件会自动把覆盖率数据暴露为环境变量,常用的有:
JACOCO_CLASS_COVERAGE:类覆盖率JACOCO_METHOD_COVERAGE:方法覆盖率JACOCO_LINE_COVERAGE:行覆盖率
这些变量可以直接在任何通知插件的内容里引用,不用额外解析。
二、自定义脚本实现(适合高度定制需求)
如果插件满足不了你的定制化要求,用脚本处理更灵活:
1. Shell脚本(适用于自由风格任务)
先解析Jacoco的输出文件提取数据,再发送邮件:
# 从jacoco.csv提取行覆盖率 LINE_COVERAGE=$(grep "LINE_COVERAGE" target/site/jacoco/jacoco.csv | cut -d',' -f4) # 发送邮件,附带摘要和报告文件 echo "本次构建Jacoco覆盖率摘要: 行覆盖率:${LINE_COVERAGE}% 完整报告见附件 " | mailx -s "Jenkins构建覆盖率通知" -a target/site/jacoco/index.html team@yourdomain.com
把这段脚本加到「构建后操作」的「Execute shell」里即可。
2. Groovy脚本(适用于Pipeline任务)
在Jenkinsfile里直接解析Jacoco报告并发送通知:
pipeline { agent any stages { stage('构建&测试') { steps { sh 'mvn clean test jacoco:report' } } } post { always { jacoco() script { // 解析jacoco.xml获取行覆盖率 def jacocoXml = new XmlSlurper().parse(file: 'target/site/jacoco/jacoco.xml') def lineTotal = jacocoXml.counter.find { it.@type == 'LINE' }.@total.text() as Integer def lineCovered = jacocoXml.counter.find { it.@type == 'LINE' }.@covered.text() as Integer def lineCoverage = String.format("%.2f", (lineCovered / lineTotal) * 100) // 发送邮件 emailext( subject: "构建通知:${currentBuild.fullDisplayName} 覆盖率报告", body: """ <h3>本次构建覆盖率摘要</h3> <ul> <li>行覆盖率:${lineCoverage}%</li> <li><a href="${BUILD_URL}jacoco/">点击查看完整报告</a></li> </ul> """, to: 'team@yourdomain.com' ) } } } }
内容的提问来源于stack exchange,提问作者ashishrana.cse
相关产品推荐
相关产品推荐

