如何在Jenkins任务中获取PR评审者邮箱地址并发送构建报告
Jenkins结合Bitbucket实现PR评审人专属报告推送方案
前置依赖准备
- Jenkins端需提前安装3个插件:Bitbucket Branch Source Plugin、Email Extension Plugin、Pipeline Utility Steps Plugin
- Bitbucket端为Jenkins服务账号开通对应仓库的读取权限+PR信息查询权限即可,无需额外安装插件。
关联Bitbucket与Jenkins任务
- 多分支流水线场景:直接在任务的「分支源」配置中关联对应Bitbucket仓库,开启PR触发构建规则,构建时Jenkins会自动注入
CHANGE_ID(PR编号)、CHANGE_URL(PR访问地址)等内置环境变量。 - 自由风格任务场景:在Bitbucket仓库配置webhook,触发事件选择PR更新类事件,将PR编号作为构建参数传递给Jenkins任务即可。
核心逻辑编写(获取评审人+推送报告)
核心就是在构建完成后的post阶段调用Bitbucket API拉取对应PR的评审人列表,再定向发送邮件,参考流水线片段:
pipeline { agent any stages { // 原有构建、生成报告的业务逻辑放在此处 stage('生成报告') { steps { // 示例逻辑,替换为自身生成报告的代码,最终输出如report.html sh 'echo "构建报告内容" > report.html' } } } post { success { script { // 读取PR编号,自由风格任务从构建参数中取即可 def prId = env.CHANGE_ID // 替换为自身环境的实际配置 def bitbucketHost = "你的Bitbucket服务域名" def projectKey = "Bitbucket项目标识" def repoSlug = "Bitbucket仓库标识" // 用你配置的Jenkins服务账号的账号密码做Base64编码 def auth = "Basic " + "账号:密码".bytes.encodeBase64().toString() // 调用Bitbucket API拉取PR参与人信息 def response = httpRequest( url: "https://${bitbucketHost}/rest/api/1.0/projects/${projectKey}/repos/${repoSlug}/pull-requests/${prId}/participants", customHeaders: [[name: "Authorization", value: auth]], failOnError: false ) // 解析返回结果提取评审人邮箱 def participants = readJSON text: response.content def reviewerEmails = [] participants.each { p -> if (p.role == "REVIEWER") { reviewerEmails.add(p.user.emailAddress) } } // 邮箱去重避免重复发送 reviewerEmails = reviewerEmails.unique() // 定向给评审人发送带报告附件的邮件 emailext( to: reviewerEmails.join(","), subject: "PR ${prId} 构建报告已生成", body: "对应PR地址:${env.CHANGE_URL}\n构建编号:${env.BUILD_NUMBER}", attachmentsPattern: "**/report.html" // 替换为实际报告文件的匹配路径 ) } } } }
报告查看权限校验
如果要确保只有评审人可以查看报告,可选择两种方案:
- 将报告归档到Jenkins构建目录,配置Jenkins使用Bitbucket OAuth登录,单独给对应PR的评审人开放该次构建报告的查看权限
- 将报告作为附件上传到对应Bitbucket PR的评论区,依托Bitbucket本身的仓库权限控制,只有PR参与的评审人可以查看附件
内容的提问来源于stack exchange,提问作者Elzin
相关产品推荐
相关产品推荐

