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

如何从GitHub获取Pull Request评审状态以触发Jenkins脚本?

解决方案:利用GitHub Enterprise内置评审状态 + Jenkins API调用

你完全不用自己实现评审逻辑,GitHub已经帮你封装好了现成的状态字段,结合Jenkins的简单API调用就能搞定。下面是具体步骤:

1. 先在GitHub Enterprise仓库配置好必需评审规则

先确保你的仓库已经开启了Required Pull Request Reviews,并且配置CODE OWNER相关要求:

  • 进入仓库Settings → Branches → 找到你的保护分支规则(比如main)
  • 勾选「Require pull request reviews before merging」
  • 勾选「Require approval from code owners」
  • 可选但建议勾选「Dismiss stale pull request approvals when new commits are pushed」(新提交会重置评审状态,避免过期的审批生效)

这一步让GitHub自己帮你管控评审完成的条件:所有CODE OWNERS必须批准,且没有任何评审者提出变更请求,满足这些条件后,GitHub会自动标记PR的评审状态为「approved」。

2. 在Jenkins中通过GitHub API获取现成的评审状态

你可以在Jenkins Pipeline里调用GitHub Enterprise的API,直接获取GitHub已经计算好的评审决策(review_decision字段),不用自己去统计CODE OWNERS的评审情况。

示例Pipeline代码

pipeline {
    agent any
    environment {
        // 这些变量可从Jenkins GitHub插件自动注入,或手动设置
        PR_NUMBER = env.CHANGE_ID
        REPO_OWNER = env.GITHUB_OWNER
        REPO_NAME = env.GITHUB_REPO
        // 提前在Jenkins凭据中存储GitHub PAT,权限需包含repo范围
        GITHUB_TOKEN = credentials('ghe-access-token')
        GHE_DOMAIN = 'your-ghe-domain.com' // 替换为你的GitHub Enterprise域名
    }
    stages {
        stage('Check PR Review Status') {
            steps {
                script {
                    // 调用GitHub API获取PR详情
                    def prResponse = httpRequest(
                        url: "https://${GHE_DOMAIN}/api/v3/repos/${REPO_OWNER}/${REPO_NAME}/pulls/${PR_NUMBER}",
                        authentication: GITHUB_TOKEN,
                        contentType: 'APPLICATION_JSON',
                        acceptType: 'APPLICATION_JSON'
                    )
                    
                    def prData = new groovy.json.JsonSlurper().parseText(prResponse.content)
                    
                    // 检查评审决策状态
                    if (prData.review_decision == 'approved') {
                        echo "PR评审已完成,触发脚本..."
                        sh './your-target-script.sh' // 替换为你的脚本路径
                    } else {
                        echo "PR评审未完成(当前状态:${prData.review_decision}),跳过脚本执行"
                    }
                }
            }
        }
    }
}

关键说明

  • review_decision是GitHub官方提供的评审状态汇总字段,可能的取值:
    • approved:所有必需评审者(含CODE OWNERS)已批准,且无变更请求
    • changes_requested:有评审者提出了变更请求
    • review_required:评审还未完成(比如CODE OWNERS尚未审批)
  • 这个字段完全由GitHub维护,你不用自己去判断每个CODE OWNER的评审状态,省心很多。

3. 优化Jenkins触发方式(可选)

如果你之前是监听PR评论触发任务,建议调整GitHub Webhook的触发事件为:

  • Pull request review(评审状态变化时触发)
  • Pull request(PR状态更新时触发)

这样Jenkins任务只会在评审状态变化时触发,而不是每次评论都跑,更高效。


内容的提问来源于stack exchange,提问作者Matthias

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:05:30