如何将GitHub复刻仓库的密钥传递至源仓库?
GitHub Actions复刻仓PR无法读取自定义Secret的解决方法
问题原因
当你从复刻仓库向源仓库发起PR时,GitHub Actions工作流是在源仓库的环境中运行的,出于安全限制,工作流只能访问源仓库的Secrets,复刻仓库的Secrets不会被传递到这个上下文里——这是GitHub防止恶意PR窃取敏感信息的默认机制。
具体解决办法
分两种场景处理:
场景1:你有权限管理源仓库
- 直接在源仓库的「Settings → Secrets and variables → Actions」中添加
GH_OAUTH_TOKEN密钥,工作流运行时就能直接读取到源仓的这个Secret。 - 或者修改工作流的触发事件为
pull_request_target替代pull_request,这个事件会在源仓上下文执行,但可以拉取复刻仓的PR代码,同时能读取源仓的Secrets。不过注意:如果PR来自不可信贡献者,这个方法有安全风险,但你的情况是自己的复刻仓,风险可控。修改后的触发配置示例:on: push: branches: - "develop" - "staging" pull_request_target: branches: - "develop" - "staging"
场景2:你没有源仓库管理权限,只想在自己的复刻仓运行工作流
- 调整工作流触发逻辑,只在你的复刻仓内部运行:比如在复刻仓里发起PR到自己的
develop/staging分支,这时工作流会在复刻仓环境执行,自然能读取你添加的GH_OAUTH_TOKEN。 - 或者给工作流添加仓库判断条件,确保只有你的复刻仓触发时才使用这个Secret:
on: push: branches: - "develop" - "staging" if: github.repository == '你的用户名/复刻仓库名称' pull_request: branches: - "develop" - "staging" if: github.repository == '你的用户名/复刻仓库名称'
内容的提问来源于stack exchange,提问作者Robin Thomas
相关产品推荐
相关产品推荐

