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

GitLab K8s Runner使用SSH克隆子模块失败求助

解决GitLab K8s执行器Runner克隆SSH子模块失败问题

核心问题分析

你遇到的错误是Git克隆SSH子模块时,要么找不到SSH命令路径,要么缺少认证所需的SSH密钥配置——尽管镜像内置SSH,但K8s执行器的作业容器默认不会自动加载SSH凭证,需要手动配置环境。

解决方案步骤

1. 配置CI/CD变量存储SSH凭证

在GitLab项目的设置 > CI/CD > 变量中添加以下变量:

  • SSH_PRIVATE_KEY:填入用于克隆子模块的SSH私钥(使用多行变量格式保留私钥的换行符)
  • SSH_KNOWN_HOSTS:填入Git服务器的公钥指纹(可通过本地执行ssh-keyscan git.123.git获取)

2. 在CI脚本中初始化SSH环境

在.gitlab-ci.yml的before_script中添加SSH配置步骤,确保作业容器能正确使用密钥:

before_script:
  # 创建SSH目录并设置严格权限
  - mkdir -p ~/.ssh
  - echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
  - chmod 600 ~/.ssh/id_rsa
  # 配置已知主机,避免首次连接的确认提示
  - echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
  - chmod 644 ~/.ssh/known_hosts
  # 可选:验证SSH连接是否正常
  - ssh -T git@git.123.git || true

3. 更安全的替代方案:改用HTTPS认证

如果允许修改子模块的远程地址,推荐用GitLab内置的CI_JOB_TOKEN进行HTTPS认证,无需维护SSH密钥:

before_script:
  # 将SSH地址自动替换为HTTPS,用临时CI_JOB_TOKEN认证
  - git config --global url."https://gitlab-ci-token:${CI_JOB_TOKEN}@git.123.git/".insteadOf "git@git.123.git:"

之后执行git submodule update --init --recursive即可自动完成子模块克隆。

4. 排查SSH命令路径问题

若仍提示找不到ssh命令,在before_script中检查路径并修正:

before_script:
  - which ssh
  - echo $PATH
  # 若ssh不在默认PATH中,手动添加(示例路径,根据镜像实际情况调整)
  - export PATH=$PATH:/usr/bin

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 08:50:02