Github Actions中如何为私有子模块单独配置部署密钥而非主仓库
仅为私有子模块配置SSH密钥的Github Actions实现方法
当前使用actions/checkout@v3的ssh-key参数会将密钥同时用于主仓库和子模块的拉取,而你的ACCESS_KEY只是子模块的部署密钥,无法访问主仓库,因此会触发错误。以下是仅让密钥作用于子模块的实现方案:
具体步骤
先通过默认权限拉取主仓库
主仓库直接使用Github Actions提供的GITHUB_TOKEN拉取,不需要指定自定义SSH密钥:- uses: actions/checkout@v3 # 不配置ssh-key,依赖默认的GITHUB_TOKEN拉取主仓库加载子模块专属的SSH密钥
使用webfactory/ssh-agent动作将子模块的部署密钥加载到SSH代理中,该密钥只会在访问对应子模块仓库时生效:- uses: webfactory/ssh-agent@v0.7.0 with: ssh-private-key: ${{ secrets.ACCESS_KEY }}同步并拉取私有子模块
根据子模块的配置情况执行拉取操作:- 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
相关产品推荐
相关产品推荐

