在Jenkins构build中不更新的git子模块
我在jenkins的一个项目中有一个子模块。 我已经启用高级设置recursion更新子模块。 当我运行构build时,我看到工作区中有来自子模块的文件。 问题是,它似乎是子模块的第一个修订。 当我推动更改(在github上托pipe回购)jenkins似乎没有更新子模块以获得正确的更改。 有没有人见过这个?
请注意, Jenkins Git插件2.0将具有“advance submodule behaviour”,这应该确保子模块的正确更新:
正如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“高级子模块行为”。
然后select“recursion更新子模块”:
最后偶然发现了这样做,这很简单。
问题:
具有凭据的初始克隆可以正常工作,但随后的submodule
克隆会失败,并显示不正确的凭据。
- 自动高级子模块克隆:
Source Code Management >> Additional Behaviours >> Advanced sub-modules behaviours
:导致凭证错误。 - 在
Execute Shell
部分中的git submodule update --init
也失败,凭证错误。
解决scheme:
我正在使用jenkins-1.574
。
- 检查
Build Environment >> SSH Agent
框。 - select正确的凭据(可能与“
Source Code Management
部分中select的相同 -
更新
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之前清除工作区”,这样可以始终获取正确的子模块。