繁体   English   中英

GitLab runner 获取子模块的“主机密钥验证失败”

[英]GitLab runner gets "host key verification failed" for submodules

我面临以下问题:
我正在尝试配置 GitLab CI 管道(shell)。
我的存储库包含两个子模块。
这两个子模块与包含它们的超级存储库位于同一台 GitLab 服务器上。
克隆是一个 SSH 克隆,我已经在本地配置了密钥,并将我的密钥添加到 GitLab。
在安装了 runner 的机器上,我可以毫无问题地克隆所有东西,包括子模块。
但是,当运行器尝试克隆时,它会返回“主机密钥验证失败”,但仅限于子模块。
我尝试用自己的用户和我的用户配置跑步者:

sudo gitlab-runner install --user=<user> 

没有效果。
最让我困惑的是,错误仅针对子模块,即使它们与包含它们的超级仓库位于同一台服务器上,并且可以毫无问题地克隆超级仓库(当我关闭子模块递归变量时yml文件):

GIT_SUBMODULE_STRATEGY: recursive

但是当然我没有子模块。
对于检查或尝试的任何建议,我将不胜感激!

“主机密钥验证失败”是关于机器密钥(在~/.ssh/known_hosts中列出的那些),而不是您的 gitlab 密钥。

例如:如果最初的git clone没有以与更新子模块的用户相同的用户运行,则它们没有相同的~/.ssh/known_hosts文件,并且 ssh 命令可以为第一个用户正常工作而不会出错,而第二次失败。


干净的修复方法是:将您知道正确的主机密钥复制到预期的known_host文件中。

参见例如ssh 使用 known_hosts 以外的 $HOME/.ssh/known_hosts

# use a 'known_hosts' file with the host key of your git server
GIT_SSH_COMMAND=`ssh -o UserKnownHostsFile=<some provisioned known_hosts file>`

几乎每个人都使用的解决方法是:关闭 HostKey 验证。

# for example : set the GIT_SSH_COMMAND environment variable
GIT_SSH_COMMAND='ssh -o StrictHostKeyChecking=no'

如此适用于 GitLab 的解决方案?

使用 ssh 的 git clone,我没有一个好的目标,所以我可以通过 GitLab CI 将更改从 runner Shell 推送到子模块。 管道曾经失败并打印此错误。 错误管道作业

在作为项目的本地回购中,文件配置包含带有 URL 的那一行,更多的是没有关于管道的登录。 .git/配置

一些帮助或参考演练最终解决了故障排除的挑战!

这是我在文件“.gitlab-ci.yml”上的代码

变量:TEST_VAR:“在所有 Etecnic 项目中更新 Git Submoudel。”

job1: 变量:{} 脚本:- echo "$TEST_VAR"

job2: variables: {} script: - echo "OK" >> exito.txt - git add --all - git commit -m "Update Submodule" - git push origin HEAD:master 扩展片段版本:

GitLab:

gitlab-ce 已经是最新版本(15.7.0-ce.0)。

亚军:

版本:15.6.1

Git 修订版:7178588d

Git 分支:15-5-稳定

GO版本:go1.18.7

内置:2022-11-11T09:45:25+0000

操作系统/架构:linux/amd64

非常感谢您的关注。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM