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

Github Actions中如何为私有子模块单独配置部署密钥而非主仓库

仅为私有子模块配置SSH密钥的Github Actions实现方法

当前使用actions/checkout@v3的ssh-key参数会将密钥同时用于主仓库和子模块的拉取,而你的ACCESS_KEY只是子模块的部署密钥,无法访问主仓库,因此会触发错误。以下是仅让密钥作用于子模块的实现方案:

具体步骤

  1. 先通过默认权限拉取主仓库
    主仓库直接使用Github Actions提供的GITHUB_TOKEN拉取,不需要指定自定义SSH密钥:

    - uses: actions/checkout@v3
      # 不配置ssh-key,依赖默认的GITHUB_TOKEN拉取主仓库
    
  2. 加载子模块专属的SSH密钥
    使用webfactory/ssh-agent动作将子模块的部署密钥加载到SSH代理中,该密钥只会在访问对应子模块仓库时生效:

    - uses: webfactory/ssh-agent@v0.7.0
      with:
        ssh-private-key: ${{ secrets.ACCESS_KEY }}
    
  3. 同步并拉取私有子模块
    根据子模块的配置情况执行拉取操作:

    - name: 拉取私有子模块
      run: |
        # 若子模块在.gitmodules中配置的是HTTPS地址,需先替换为SSH格式(可选)
        # git config submodule.你的子模块相对路径.url git@github.com:子模块用户名/子模块仓库名.git
        git submodule sync
        git submodule update --init --recursive
    

关键说明

  • 主仓库拉取依赖Github Actions默认的GITHUB_TOKEN,无需额外配置权限,只要工作流有仓库读取权限即可。
  • webfactory/ssh-agent会自动处理SSH密钥的加载和代理配置,只有当Git请求访问子模块仓库时,才会使用你提供的ACCESS_KEY。
  • 确保子模块的部署密钥配置正确:将ACCESS_KEY对应的公钥添加到子仓库的「Settings → Deploy keys」中,并勾选「Allow write access」(如果需要推送的话)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:05:22