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

如何在GitHub Push触发的Workflow中获取PR创建者与审批者信息?

如何在Push触发的GitHub Workflow中获取前置PR的创建者和审批者信息

一、获取PR信息的最佳实现方式

推送到main分支的提交通常对应合并的Pull Request,核心思路是通过提交SHA关联到对应的PR,再通过GitHub API提取所需信息,推荐使用官方的gh命令行工具或actions/github-script Action简化操作:

方法1:使用gh命令行(简洁高效)

在Workflow中添加以下步骤(需确保已配置GITHUB_TOKEN授权):

# 获取当前推送提交关联的PR编号
PR_NUMBER=$(gh pr view --json number --jq '.number' "$GITHUB_SHA")

# 如果存在关联PR,提取创建者和审批者
if [ -n "$PR_NUMBER" ]; then
  # 获取PR创建者
  PR_CREATOR=$(gh pr view "$PR_NUMBER" --json author --jq '.author.login')
  # 获取所有审批者(筛选状态为APPROVED的评审)
  PR_APPROVERS=$(gh pr view "$PR_NUMBER" --json reviews --jq '.reviews[] | select(.state=="APPROVED") | .author.login' | paste -sd "," -)
  
  # 可将信息存入环境变量或写入文件,供后续步骤使用
  echo "PR_CREATOR=$PR_CREATOR" >> $GITHUB_ENV
  echo "PR_APPROVERS=$PR_APPROVERS" >> $GITHUB_ENV
fi

方法2:使用actions/github-script(灵活可编程)

适合需要复杂逻辑处理的场景,示例Step如下:

- name: 获取PR创建者和审批者信息
  uses: actions/github-script@v7
  with:
    script: |
      // 通过提交SHA获取关联的PR列表
      const { data: pulls } = await github.rest.pulls.list({
        owner: context.repo.owner,
        repo: context.repo.repo,
        state: 'closed',
        head: context.sha
      });

      if (pulls.length > 0) {
        const pr = pulls[0];
        // 提取PR创建者
        const creator = pr.user.login;
        // 获取所有审批者
        const { data: reviews } = await github.rest.pulls.listReviews({
          owner: context.repo.owner,
          repo: context.repo.repo,
          pull_number: pr.number
        });
        const approvers = reviews
          .filter(review => review.state === 'APPROVED')
          .map(review => review.user.login);

        // 将信息输出到环境变量
        core.exportVariable('PR_CREATOR', creator);
        core.exportVariable('PR_APPROVERS', approvers.join(','));
        
        console.log(`PR创建者: ${creator}`);
        console.log(`审批者: ${approvers.join(', ')}`);
      } else {
        console.log('当前提交无关联的Pull Request');
      }

二、设计层面的最优方案

要保持Push触发主Workflow的同时获取PR信息,推荐以下两种架构:

方案1:主流程+辅助Job分离

  • 保留原有的构建、部署Job不变,新增一个独立的辅助Job,专门负责PR信息的收集与记录
  • 辅助Job依赖主Job完成后执行(通过needs关键字关联),确保信息收集不影响核心部署流程
  • 优势:核心流程与辅助解耦,便于后续修改或扩展信息记录逻辑

方案2:嵌入Step到主Workflow

  • 在原Workflow的构建/部署步骤前后,插入PR信息收集的Step
  • 将收集到的信息作为构建制品的元数据(比如写入部署日志、附加到Docker镜像标签、存入GitHub Artifact)
  • 优势:流程紧凑,无需额外Job调度,适合信息需与制品强关联的场景

关键注意事项

  • 权限配置:默认的GITHUB_TOKEN已包含pull_requests: read权限,无需额外申请
  • 异常处理:需添加判断逻辑,处理直接推送(无PR合并)的场景,避免流程中断
  • 信息持久化:根据需求选择存储方式,比如写入GitHub Artifact供后续查询,或同步到内部部署系统的记录中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 17:35:06