如何使用github存储库在jenkins中触发单个作业

时间:2012-02-21 08:00:58

标签: git module github jenkins

我们的项目托管在github上,我们设置了Jenkins服务器,问题是项目中有很多模块,每个模块都有自己的工作,之前我们使用perforce它可以更新指定的源代码因此,只有属于那些已被修改的模块的作业才会被触发,但是git会将整个项目视为一个单独的存储库,它不会告诉我们哪些模块已被修改,因此Jenkinks不能做同样的事情。

我已经调查了git子模块和git子树,看起来所有这些都有点复杂,有没有更简单的方法来存档?

3 个答案:

答案 0 :(得分:1)

Git会使用git log告诉您这些信息(请参阅--exit-code隐含的--quiet参数。我不知道Jenkins Git插件是否会给你这种技巧,但是你可以用一个简单的shell脚本来做到这一点。

检查目录dir是否在修订版AB之间发生了变化,

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目录。