GitHub Actions拉取多仓库遇权限问题,求多仓库自动化部署方案
解决GitHub Actions中Composer拉取多私有仓库权限问题
问题核心
当前部署Action执行Composer命令时,拉取私有仓库报错git@github.com: Permission denied (publickey),原因有两点:
- 默认
GITHUB_TOKEN仅拥有当前Action所在仓库的权限,无法访问组织内其他9个私有仓库; - Composer使用SSH地址拉取仓库时,不会自动复用
GITHUB_TOKEN(该token仅适用于HTTPS认证),且部署密钥对多仓库场景过于繁琐。
可行解决方案
方案一:Git URL替换(无需修改composer.json)
通过Git配置将所有SSH格式的仓库地址自动替换为带权限token的HTTPS地址,一次性解决多仓库认证问题:
生成组织级PAT
- 在GitHub个人设置中创建新的Personal Access Token(PAT),勾选
repo权限(确保能访问组织内所有私有仓库); - 将该PAT存入Action所在仓库的Secrets,命名为
ORG_PRIVATE_REPO_TOKEN。
- 在GitHub个人设置中创建新的Personal Access Token(PAT),勾选
更新GitHub Actions配置
在执行Composer命令前,添加Git配置步骤,替换URL规则:name: Composer Update & Deploy on: # 配置触发事件,比如监听分支合并 pull_request: types: [closed] branches: [main] jobs: deploy: runs-on: ubuntu-latest steps: - name: 检出代码 uses: actions/checkout@v4 - name: 设置PHP版本 uses: shivammathur/setup-php@v2 with: php-version: '8.1' # 替换为项目所需PHP版本 - name: 配置Git用HTTPS+PAT访问私有仓库 run: | git config --global url."https://${{ secrets.ORG_PRIVATE_REPO_TOKEN }}@github.com/".insteadOf "git@github.com:" - name: 执行composer update run: composer update ${{ env.COMPOSER_PACKAGES }} --no-interaction - name: 执行composer install run: composer install --no-interaction --optimize-autoloader - name: 部署至Acquia # 添加Acquia部署步骤,比如官方Action或自定义脚本
方案二:修改仓库地址为HTTPS+Composer认证
如果愿意调整composer.json的仓库配置,可采用此方案:
修改composer.json中的仓库地址
将所有SSH格式的URL替换为HTTPS:"repositories": { "0": { "type": "vcs", "url": "https://github.com/organization/repo1.git" }, "1": { "type": "vcs", "url": "https://github.com/organization/repo2.git" } }在Actions中配置Composer认证
通过环境变量传递PAT给Composer:name: Composer Update & Deploy on: # 触发事件配置 pull_request: types: [closed] branches: [main] jobs: deploy: runs-on: ubuntu-latest env: COMPOSER_AUTH: '{"github-oauth": {"github.com": "${{ secrets.ORG_PRIVATE_REPO_TOKEN }}"} }' COMPOSER_PACKAGES: north* steps: - name: 检出代码 uses: actions/checkout@v4 - name: 设置PHP版本 uses: shivammathur/setup-php@v2 with: php-version: '8.1' - name: 执行composer update run: composer update ${{ env.COMPOSER_PACKAGES }} --no-interaction - name: 执行composer install run: composer install --no-interaction --optimize-autoloader - name: 部署至Acquia # 部署步骤
关键注意事项
- 确保你的PAT拥有所有目标私有仓库的读取权限,如果是组织内仓库,可将PAT持有者账户加入对应仓库的协作者列表,或设置组织级权限;
- 若使用默认
GITHUB_TOKEN,仅能访问当前Action所在仓库,无法跨仓库拉取代码,因此必须使用组织级PAT。
内容的提问来源于stack exchange,提问作者Donald Mcgrath
相关产品推荐
相关产品推荐

