You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 18:09:04