4

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

我想知道使用 git 子模块设置 Jenkins 时的“最佳实践”是什么。主模块和子模块 repo 都通过 ssh 访问,并且由于我们有多个用户,所有这些用户都有各自的用户名。拥有自己用户的 Jenkins 也是如此。但是,我们(我)偶然发现了一个问题。如果我创建一个子模块: git submodule add ssh://my-user-name@address-to-module-repo推送它,Jenkins 在尝试获取子模块时会将我称为用户,这显然会失败。如果其他用户执行拉取操作,我的用户名仍将位于路径中(在 .gitmodule、.git/config 等中)。

我发现了另一篇文章Git submodules and ssh access handling sharing between "normal" users,但是当 Jenkins 尝试构建时它并没有真正解决问题,因为我只能在 Jenkins 获取我无法获取的所有内容后执行 shell cmd's按照链接中的说明做,或者我可以(詹金斯新手)吗?

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

兄弟,手枪先生

4

3 回答 3

5

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

您可以使用

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

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

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

于 2012-10-16T17:20:17.543 回答
2

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

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

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

这些脚本自动工作的方式是通过内容过滤器驱动程序

内容过滤器驱动程序

于 2012-06-12T09:30:28.583 回答
2

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

于 2012-06-26T08:59:01.427 回答