在Jenkins构build中不更新的git子模块

我在jenkins的一个项目中有一个子模块。 我已经启用高级设置recursion更新子模块。 当我运行构build时,我看到工作区中有来自子模块的文件。 问题是,它似乎是子模块的第一个修订。 当我推动更改(在github上托pipe回购)jenkins似乎没有更新子模块以获得正确的更改。 有没有人见过这个?

请注意, Jenkins Git插件2.0将具有“advance submodule behaviour”,这应该确保子模块的正确更新:

git 2.0

正如vikramvi所评论的:

Advanced sub-modules behavior >“ Path of the reference repo to use during submodule update ”对此字段添加子模块git url。

路径

你知道你的git仓库总是引用一个子模块的特定版本吗? jenkins不会自动更改修订。

如果您想要对子模块进行更新的修订,您必须在您的本地git仓库中执行此操作:

 cd submoduledir git pull cd .. git add submoduledir git commit -m 'Updated to latest revision of submoduledir' git push # Go and watch jenkins build with the new revision of the submodule 

当你这样做的时候,Jenkins会在构build过程中检查子模块的完全相同的版本。 jenkins本身并不决定使用哪个子模块的修订。 这是git submodules和svn externals之间的根本区别。

你可能想阅读一些关于子模块的很好的参考资料,例如http://progit.org/book/ch6-6.html

这在Jenkins网站下的Git Plugin文档中有介绍: recursion子模块 。

摘抄

GIT插件支持具有子模块的存储库,子模块本身又具有子模块。 这个必须打开:在作业configuration – >部分源代码pipe理Git – > 高级button (在分支构build下) – > recursion更新子模块

从作业的configuration屏幕上,在“源代码pipe理”部分,按下“ 添加”button,select“高级子模块行为”。

S1

S2

然后select“recursion更新子模块”:

S3

最后偶然发现了这样做,这很简单。

问题:

具有凭据的初始克隆可以正常工作,但随后的submodule克隆会失败,并显示不正确的凭据。

  1. 自动高级子模块克隆: Source Code Management >> Additional Behaviours >> Advanced sub-modules behaviours :导致凭证错误。
  2. Execute Shell部分中的git submodule update --init也失败,凭证错误。

解决scheme:

我正在使用jenkins-1.574

  1. 检查Build Environment >> SSH Agent框。
  2. select正确的凭据(可能与“ Source Code Management部分中select的相同
  3. 更新Execute Shell部分中的子模块

     git submodule sync git submodule update --init --recursive 

这是一个屏幕截图 在这里输入图像说明

看起来像我find了一个解决scheme:

我添加了一个构build步骤来执行下面的shell命令:

 git submodule foreach git checkout master git submodule foreach git pull 

如果您正在使用Jenkins Git模块,则可以将其设置为“在构build之前清除工作区”,这样可以始终获取正确的子模块。