Jenkins,在多个用户的ssh上获取git子模块?

时间:2012-06-12 09:03:23

标签: git ssh jenkins fetch git-submodules

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

我想知道使用git子模块设置Jenkins时的“最佳实践”。 main和submodule repo都可以通过ssh访问,因为我们有几个用户,所有这些用户都有自己的用户名。对于拥有自己用户的Jenkins也是如此。但是,我们(我)偶然发现了一个问题。如果我创建一个子模块: git submodule添加ssh:// my-user-name @ address-to-module-repo 推送它,Jenkins会在尝试<时以用户身份引用我strong> fetch 子模块,显然会失败。如果其他用户执行了 pull ,我的用户名仍将在路径中(在.gitmodule,.git / config等等中)。

我发现另一个帖子Git submodules and ssh access处理“普通”用户之间的共享,但是当Jenkins尝试构建时它并没有真正解决问题,因为我只允许在Jenkins取出链接中提到的我不能做的所有内容之后执行shell cmd,或者我可以(Jenkins新手)吗?

所以,总结一下。如何解决这个问题,以便在通过ssh获取子模块时Jenkins将使用自己的用户?

BR, 皮斯托尔先生

3 个答案:

答案 0 :(得分:5)

我在StackOverflow的另一个问题上找到了一个很好的解决方案:Git submodule URL not including username?

您可以使用

[submodule foosub]
path = foosub
url = ./../foosub

定义相对于用于项目的URL的URL。例如,如果您的项目URL为myuser@myserver.com/git/project,并且您的子模块URL为myuser@myserver.com/git/foosub,则配置应该有效。当然,如果子模块位于与项目不同的服务器上,它就无法工作。

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

答案 1 :(得分:2)

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

  • 检测它是否在Jenkins环境中运行
  • detect the content .gitmodules文件
  • 更改.gitmodules的内容,以便用Jenkins替换任何用户

您还可以使用另一个脚本来恢复.gitmodules文件的原始内容,以便不对其进行任何修改。

这些脚本自动运作的方式是通过 content filter driver

content filter driver

答案 2 :(得分:2)

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