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

无法在Reusable Workflow中访问被调用仓库Secrets的技术问询

问题分析

当使用GitHub Reusable Workflow时,被调用的工作流默认在调用方仓库的执行环境中运行,因此secrets上下文指向的是调用方仓库的Secrets,而非被调用方仓库的。这就是你无法访问PERSONAL_ACCESS_TOKEN的核心原因——手动运行时工作流在自身仓库环境,能正常读取Secrets;被其他仓库调用时,执行环境切换到调用方,自然拿不到被调用仓库的Repository Secrets。

解决方案

针对你的需求(扫描工具同时支持手动触发和跨仓库自动触发,且Secrets仅存于被调用仓库),推荐采用Repository Dispatch方案,让扫描工作始终在被调用仓库的环境中执行:

步骤1:修改被调用仓库的工作流

保留workflow_dispatch用于手动触发,新增repository_dispatch事件监听,接收调用方传递的仓库和分支参数:

name: scanning-tool
on:
  workflow_dispatch:
    inputs:
      repo:
        description: 'Repo Name'     
        required: true
        type: string
      branch:
        description: 'Branch name'     
        required: true
        type: string
  repository_dispatch:
    types: [trigger-scan]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: checkout
        uses: actions/checkout@v3
      - name: Python Dependency Installation
        uses: py-actions/py-dependency-install@v3.0.0
        with:
          path: requirements.txt
      - name: setup python
        uses: actions/setup-python@v3.1.2
        with:
          python-version: 3.8
      - name: Cloning the Git Repo to be Scanned
        # 根据事件类型获取输入参数
        run: |
          REPO=${{ github.event.inputs.repo || github.event.client_payload.repo }}
          BRANCH=${{ github.event.inputs.branch || github.event.client_payload.branch }}
          git clone -b "$BRANCH" "https://github-username:${{ secrets.PERSONAL_ACCESS_TOKEN }}@github.com/org/$REPO.git"

步骤2:修改调用方仓库的工作流

使用repository-dispatch动作向被调用仓库发送触发事件,传递仓库和分支信息:

name: scan workflow
on: 
  push:
    branches: '**'

jobs:
  trigger-scan:
    runs-on: ubuntu-latest
    steps:
      - name: Trigger scanning workflow
        uses: peter-evans/repository-dispatch@v2
        with:
          token: ${{ secrets.GITHUB_TOKEN }} # 或拥有repo权限的PAT
          repository: org/repo-name # 被调用仓库的完整路径
          event-type: trigger-scan
          client-payload: |
            {
              "repo": "${{ github.event.repository.name }}",
              "branch": "${{ github.ref_name }}"
            }

关键说明

  • 此方案中,扫描工作始终在被调用仓库的环境中执行,因此能正常访问自身的Repository Secrets,和手动运行的逻辑完全一致。
  • 调用方的GITHUB_TOKEN需要拥有触发被调用仓库repository_dispatch的权限(默认情况下,同一组织内的仓库GITHUB_TOKEN具备此权限)。
备选方案(组织级Secrets)

如果所有仓库属于同一个GitHub组织,可以将PERSONAL_ACCESS_TOKEN等Secrets设置为Organization Secrets,并配置为允许所有仓库访问。这样不管复用工作流在哪个仓库触发,都能读取到该Secrets,无需修改工作流逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:15:35