如何从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
相关产品推荐
相关产品推荐

