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

如何在GitHub Actions工作流的不同Job间共享PR_NUMBER变量?

跨Job传递变量的正确方法

你的问题出在**$GITHUB_ENV设置的环境变量仅能在当前Job内部共享,无法跨Job传递**。要实现跨Job变量共享,必须使用GitHub Actions的Job Outputs机制,具体修改如下:

1. 修改check-pr Job,配置输出变量

在check-pr Job中添加outputs字段声明要传递的变量,同时将原来写入$GITHUB_ENV的逻辑改为写入$GITHUB_OUTPUT(GitHub官方推荐的最新方式,替代旧的set-output命令):

jobs:
  check-pr:
    runs-on: ubuntu-latest
    # 声明该Job的输出变量
    outputs:
      pr_number: ${{ steps.check-prs.outputs.pr_number }}
    steps:
      - name: Check PRs
        id: check-prs
        run: |
          branch_name=${GITHUB_REF#refs/heads/}
          # 优化:只调用一次API,避免重复请求
          pr_data=$(curl --header "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
                        --header "Accept: application/vnd.github.v3+json" \
                        "https://api.github.com/repos/${{ github.repository }}/pulls?state=open&head=${{ github.repository_owner }}:${branch_name}")
          pr_count=$(echo "$pr_data" | jq length)
          if [ $pr_count -eq 1 ]; then
            pr_number=$(echo "$pr_data" | jq -r '.[0].number')
            # 将PR编号写入Job输出
            echo "pr_number=$pr_number" >> $GITHUB_OUTPUT
          else
            echo "PR count is not equal to 1. Exiting workflow."
            exit 1
          fi

2. 修改publish Job,引用跨Job输出

在publish Job中,通过needs.check-pr.outputs.pr_number直接引用check-pr Job的输出变量,同时修正Job名称的变量引用方式(Job名称在初始化阶段解析,需直接用表达式,不能依赖env变量):

publish:
    needs: [check-pr]
    runs-on: ubuntu-latest
    # 直接引用输出变量定义Job名称
    name: publish v0.0.1.dev${{ needs.check-pr.outputs.pr_number }}
    env:
      # 可选:如果后续步骤需要用环境变量,可以在这里赋值
      PR_NUMBER: ${{ needs.check-pr.outputs.pr_number }}
    steps:
      # 示例步骤:验证变量是否获取成功
      - name: Print PR number
        run: echo "PR Number is $PR_NUMBER"
      # ... 其他步骤

关键说明

  • $GITHUB_ENV的作用域是当前Job内的后续步骤,无法跨Job访问;而$GITHUB_OUTPUT结合Job的outputs字段,可以将变量提升为Job级别的输出,供依赖它的Job使用。
  • Job的name字段属于静态配置(在Workflow初始化时解析),因此不能直接使用$PR_NUMBER这种运行时环境变量,必须直接用${{ needs.check-pr.outputs.pr_number }}表达式引用。
  • 优化API调用:原来的代码两次调用GitHub API,修改后只调用一次并缓存结果,既提升效率又避免触发API限流。

内容的提问来源于stack exchange,提问作者Mehdi Ben Hamida

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 16:23:19