Gitea:如何通过控制台或API获取Pull Request审批状态适配Jenkins测试流水线
Jenkins PR审批状态的获取方法
一、控制台手动查看
- 如果你用的是GitHub/GitLab这类代码托管平台的PR集成插件(比如GitHub Pull Request Builder),直接在Jenkins对应流水线的PR详情页就能看到审批状态——比如已批准、待审批、拒绝等,不少插件会把审批信息直接展示在构建历史或者PR卡片上。
- 要是用Jenkins自带的拉取请求构建功能,也可以通过页面里的PR跳转链接,直接去代码托管平台的PR页面看审批状态,Jenkins控制台里一般都有这个入口。
二、API调用获取
1. 调用代码托管平台API(更靠谱)
PR的审批状态其实存在于代码托管平台,不是Jenkins本地,所以直接调用对应平台的API是最准确的:
- GitHub:调用
GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews接口,返回的评审记录里,找state为APPROVED的条目,只要有一条有效审批,就说明PR已通过审批。 - GitLab:调用
GET /projects/{id}/merge_requests/{merge_request_iid}/approvals接口,返回的approved_by会列出所有审批人,approval_status字段直接显示当前审批状态。
2. 调用Jenkins自身API
如果你的Jenkins插件已经把PR审批状态同步到构建数据里,也可以通过Jenkins API获取:
- 先请求构建详情:
GET /job/{job_name}/{build_number}/api/json,在返回的actions字段里找和PR相关的插件数据(比如GitHubPR对应的action),里面可能包含审批状态的字段。 - 部分插件会提供专门的API端点,比如GitHub Pull Request Builder插件可能会在PR对应的构建数据里嵌入评审状态信息。
三、流水线代码里直接获取(最适合自动化场景)
在Jenkinsfile里直接写逻辑获取审批状态,不用手动去调用API,刚好适配你要根据状态切换测试套件的需求:
- GitHub场景:用
githubPullRequest步骤或者Groovy代码调用GitHub API,示例:
def prNumber = env.CHANGE_ID def repoOwner = env.CHANGE_TARGET_OWNER // 也可以手动指定 def repoName = env.CHANGE_TARGET_REPO // 也可以手动指定 def reviews = githubApiRequest(apiUrl: "https://api.github.com/repos/${repoOwner}/${repoName}/pulls/${prNumber}/reviews") def isApproved = reviews.any { it.state == 'APPROVED' } if (isApproved) { runFullTestSuite() } else { runSmokeTestSuite() }
- GitLab场景:用GitLab插件的步骤或者调用GitLab API,示例:
def mrIid = env.CHANGE_ID def projectId = env.GITLAB_PROJECT_ID def approvals = gitlabApiRequest(apiUrl: "https://gitlab.com/api/v4/projects/${projectId}/merge_requests/${mrIid}/approvals") def isApproved = approvals.approval_status == 'approved' if (isApproved) { runFullTestSuite() } else { runSmokeTestSuite() }
注意:调用第三方API时,要在Jenkins里配置好对应的凭证(比如GitHub个人访问令牌、GitLab访问令牌),确保有读取PR评审信息的权限。
内容的提问来源于stack exchange,提问作者nm1234
相关产品推荐
相关产品推荐

