Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jenkins,用多个用户通过ssh获取git子模块?_Git_Ssh_Jenkins_Fetch_Git Submodules - Fatal编程技术网

Jenkins,用多个用户通过ssh获取git子模块?

Jenkins,用多个用户通过ssh获取git子模块?,git,ssh,jenkins,fetch,git-submodules,Git,Ssh,Jenkins,Fetch,Git Submodules,我不知道标题是否描述了我想说的内容,但这里是: 我想知道使用git子模块设置Jenkins时的“最佳实践”是什么。主模块和子模块repo都是通过ssh访问的,因为我们有几个用户,所有这些用户都有各自的用户名。詹金斯也有自己的用户。然而,我们(我)偶然发现了一个问题。如果创建子模块: git子模块添加ssh://my-user-name@地址到模块repo和推送时,Jenkins会在尝试获取子模块时将我称为用户,这显然会失败。如果其他用户执行了拉操作,则我的用户名仍将位于路径中(在.gitmodu

我不知道标题是否描述了我想说的内容,但这里是:

我想知道使用git子模块设置Jenkins时的“最佳实践”是什么。主模块和子模块repo都是通过ssh访问的,因为我们有几个用户,所有这些用户都有各自的用户名。詹金斯也有自己的用户。然而,我们(我)偶然发现了一个问题。如果创建子模块: git子模块添加ssh://my-user-name@地址到模块repo推送时,Jenkins会在尝试获取子模块时将我称为用户,这显然会失败。如果其他用户执行了拉操作,则我的用户名仍将位于路径中(在.gitmodule、.git/config等中)

我在“普通”用户之间发现了另一个帖子处理共享,但这并不能真正解决Jenkins尝试构建时的问题,因为我只能在Jenkins获取链接中提到的我无法执行的所有操作后执行shell cmd,或者我可以(Jenkins新手)执行吗

总而言之。如何解决这个问题,以便Jenkins在通过ssh获取子模块时使用自己的用户

比尔,
Pistol先生

如果通用Jenkins ssh“帐户”被授权至少从这些子规则中提取,那么您可以添加一个脚本,该脚本将:

  • 检测它是否在Jenkins环境中运行
  • .gitmodules
    文件的
  • 更改
    .gitmodules
    的内容,以将任何用户替换为Jenkins用户
您还可以使用另一个脚本来恢复
.gitmodules
文件的原始内容,以便不在其上记录任何修改

这些脚本自动工作的方式是通过


解决方案是,在设置到子模块存储库的ssh连接时,更改Jenkins用户的ssh配置文件,使其使用自己的默认用户。

我在StackOverflow的另一个问题中找到了一个很好的解决方案:

你可以用

[submodule foosub]
path = foosub
url = ./../foosub
定义相对于项目所用URL的URL。例如,如果您有您的项目URLmyuser@myserver.com/git/project和您的子模块URLmyuser@myserver.com/git/foosub,配置应该可以工作。当然,如果子模块位于与项目不同的服务器上,它就无法工作


现在Jenkins应该将自己的用户数据应用于子模块,因为它在项目URL中有自己的用户数据集。

Ah,这看起来很有希望。我会尝试一下,完成后再反馈。谢谢嗨,已经有一段时间了,但我们还是按照我在下面的帖子中描述的方法解决了这个问题。谢谢你的支持。