2

问题很简单:Jenkins 可以使用ssh://ci_ro@server访问主 git 存储库(效果很好),但是我有 URL 不同的子模块:ssh://server(没有定义一些用户,这是为了允许开发人员使用此 repo 及其子模块)。我绝对不允许(坦率地说不想)提交 CI 特定的 .gitmodule 文件(这会破坏开发人员的存储库),所以请不要提及它。所以詹金斯可以拉主回购但立即失败:

Caused by: hudson.plugins.git.GitException: Command "git submodule update --init --recursive" returned status code 1: Cloning into blah/blah...
Host key verification failed.
fatal: The remote end hung up unexpectedly
Clone of 'ssh://server:someport/blah/blah...' into submodule path 'blah/blah' failed

我的问题:是否可以告诉 Jenkins 使用 ssh://ci_ro@server... 子模块的 URL 前缀而不是 .gitmodules 中配置的前缀?或者任何其他可用的解决方法、插件或黑客?我浏览了工作选项,没有找到任何有用的选项。

更新

感谢所有的帮助。解决方案是允许“jenkins”系统用户使用 git 从特定的 ssh 服务器/端口中提取。

4

4 回答 4

3

解决方案是允许运行 Jenkins 的系统用户从指定的主机/端口使用 SSH 拉取。

于 2012-06-04T08:24:07.547 回答
1

您始终可以从 shell 构建步骤手动执行此操作。

于 2012-05-24T12:46:15.107 回答
0

尝试更改构建服务器上的 /etc/ssh/ssh_config :

    StrictHostKeyChecking no
于 2012-05-24T14:14:57.060 回答
0

在您的构建步骤中,执行

git submodule init

然后通过子模块递归并调整它们的遥控器,这是不对的,但是我在 github 用户名更改时使用的脚本是:

#!/bin/sh
git remote -v | grep richoH | while read name url type; do
    newurl=`echo $url | sed -e "s/richoH/richo/"`
    git remote set-url $name $newurl
done

然后进行 git 子模块更新,我认为这不会干扰遥控器。这是未经测试的,但我相信声音。

于 2012-05-24T14:23:00.700 回答