我们的项目托管在github上,我们设置了Jenkins服务器,问题是项目中有很多模块,每个模块都有自己的工作,之前我们使用perforce它可以更新指定的源代码因此,只有属于那些已被修改的模块的作业才会被触发,但是git会将整个项目视为一个单独的存储库,它不会告诉我们哪些模块已被修改,因此Jenkinks不能做同样的事情。
我已经调查了git子模块和git子树,看起来所有这些都有点复杂,有没有更简单的方法来存档?
答案 0 :(得分:1)
Git会使用git log
告诉您这些信息(请参阅--exit-code
隐含的--quiet
参数。我不知道Jenkins Git插件是否会给你这种技巧,但是你可以用一个简单的shell脚本来做到这一点。
检查目录dir
是否在修订版A
和B
之间发生了变化,
if git log --quiet A..B -- dir ; then
# there are no changes in "dir" between rev A and B
else
# there are changes
fi
答案 1 :(得分:1)
我创建了一个Jenkins插件来实现这个目标,它就在https://github.com/jameswangz/github-shared-repository。
答案 2 :(得分:1)
现在你可以使用Jenkins的常规Git插件:你可以设置它应该监视哪些目录并开始执行作业,以及忽略哪些目录。 如果您有存储库中每个项目/模块的构建作业,并且只想在相关目录已更改时调用构建(例如,模块的目录以及任何公共/共享模块目录),则此方法效果最佳)。
为了推动这一点,我们没有共享模块的构建作业,但我们确实拥有每个模块的作业。所以我们设置插件只监视模块的目录和commons目录:这样项目将在目录的每个相关提交上重建,并提交到commons目录。