两个问题
基本上,我想为每个子模块提供自己的CI环境进行测试,但每个子模块都不是一个独立的应用程序;他们依赖于主要项目。因此,当子模块更新时,我们需要使用该子模块中的最新代码更新主项目而不必克隆子模块,必须拉出子模块中的代码。 我不想在主项目上设置轮询。 Jenkins每次都应该检查子模块以检查是否有新的提交
答案 0 :(得分:0)
我会推荐一个监控父回购的Jenkins工作。
默认情况下,如果您未启用Job Configuration -> Section Source Code Management, Git -> Advanced Button (under Branches to build) -> Recursively update submodules
,则不会克隆子模块
它只会监视父repo的克隆,定期获取最新的提交,只需启用Poll SCM,而不是通过设置指定时间表:参见“Automatically triggering a Jenkins build on Git commit”。
如果更新子模块,则表示父仓库也会发生变化 当子模块发生变化时,将创建并推送新的父repo SHA1,记录 gitlink (a special entry in the index)。该gitlink引用了子模块的新SHA1。
这意味着,每次父回购更改时,jenkins工作都需要执行以下操作:
git diff --name-only --diff-filter=M ${revision} HEAD
如果M(已修改)列表包含该作业的正确子模块,则(使用Parameterized Trigger Plugin)触发正确的CI作业。
正确的CI作业(每个子模块一个)也将监视主父回购,默认情况下也不会克隆子模块,除了正确的子作业。
它的第一步应该遵循“git submodule update specific submodule only”
git submodule update --init -- <specific relative path to submodule>
该工作的其余部分可以构建/测试该特定子模块。