无需PAT,从内部GitHub Action克隆同组织内部仓库可行吗?
可以不用生成全仓库权限的PAT,以下两种方案均可解决问题:
方案一:利用默认GITHUB_TOKEN + 仓库协作者权限
这个方案完全依赖GitHub Actions内置的GITHUB_TOKEN,无需额外创建密钥:
- 找到调用仓库(
my-org/site)的机器人账号:格式为my-org-site[bot],也可以在site仓库的Workflow运行日志中查看GITHUB_ACTOR字段的值确认。 - 在
my-org/shared-pipelines仓库的设置里,将上述机器人账号添加为协作者,赋予读取权限。 - 修改
shared-pipelines/.github/workflows/deploy.yml中的checkout步骤:
jobs: deploy: runs-on: ubuntu-latest # 明确赋予读取代码内容的权限 permissions: contents: read steps: - name: 检出shared-pipelines代码 uses: actions/checkout@v3 with: repository: my-org/shared-pipelines ref: main token: ${{ secrets.GITHUB_TOKEN }}
方案二:使用仓库级部署密钥
部署密钥仅对单个仓库生效,权限范围最小,适合对安全要求较高的场景:
- 生成SSH密钥对:在本地执行
ssh-keygen -t ed25519 -C "shared-pipelines-read-key",生成公钥和私钥。 - 配置部署密钥:将公钥添加到
my-org/shared-pipelines仓库的「Settings → Deploy keys」中,仅勾选读取权限即可;将私钥保存为组织级Secret(比如命名为SHARED_PIPELINES_READ_KEY)。 - 修改
deploy.yml中的checkout步骤:
jobs: deploy: runs-on: ubuntu-latest steps: - name: 检出shared-pipelines代码 uses: actions/checkout@v3 with: repository: my-org/shared-pipelines ref: main ssh-key: ${{ secrets.SHARED_PIPELINES_READ_KEY }}
为什么之前的checkout会失败?
你之前使用actions/checkout@v3出现「Not found」错误,是因为默认情况下,调用方(site仓库)的GITHUB_TOKEN仅拥有当前仓库的权限,无法访问同组织下的shared-pipelines仓库,上述方案通过配置权限或专用密钥解决了这个跨仓库访问的问题。
内容的提问来源于stack exchange,提问作者Lasse
相关产品推荐
相关产品推荐

