我们的项目托管在github上,我们已经建立了一个Jenkins服务器,问题是我们在项目中有很多模块,并且每个模块都有它自己的工作,使用perforce它可以更新指定模块中的源代码,因此只有作业属于那些已被修改的模块才会被触发,但git会将整个项目视为单个存储库,并且它不会告诉我们哪些模块已被因此Jenkinks不能做同样的事情。如何通过github存储库触发jenkins中的单个作业
我调查了git子模块和git子树,似乎他们都有点复杂,有没有更简单的方法来存档这个?
我们的项目托管在github上,我们已经建立了一个Jenkins服务器,问题是我们在项目中有很多模块,并且每个模块都有它自己的工作,使用perforce它可以更新指定模块中的源代码,因此只有作业属于那些已被修改的模块才会被触发,但git会将整个项目视为单个存储库,并且它不会告诉我们哪些模块已被因此Jenkinks不能做同样的事情。如何通过github存储库触发jenkins中的单个作业
我调查了git子模块和git子树,似乎他们都有点复杂,有没有更简单的方法来存档这个?
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
我创建了一个詹金斯插件来实现这个目标,它在这里https://github.com/jameswangz/github-shared-repository。
现在,您可以使用Jenkins的常规Git插件:您可以设置应该监视哪些目录并开始执行作业,以及忽略哪个目录。 如果您在存储库中的每个项目/模块都有构建作业,并且您只想在相关目录已更改时调用构建(例如,模块的目录以及任何公共/共享模块目录)。
为了把这个观点带回家,我们没有共享模块的构建作业,但是我们确实有每个模块的作业。因此,我们将插件设置为仅查看模块的目录和公用目录:通过这种方式,项目将在目录的每个相关提交中重建,并提交到公用目录。