Jenkins Gerrit-Trigger插件:如何为每次推送而不是每次提交开始构建

时间:2014-02-14 21:53:55

标签: jenkins jenkins-plugins gerrit

我们正在使用Jenkins,GerritTrigger设置CI,它将为每个提交开始构建,尽管所有提交都来自单推。由于所有更改都相互依赖,因此只需对所有更改进行单个构建,但我在GerritTrigger插件中没有看到该选项。

我相信很多公司都使用Jenkins和Gerrit组合,我很想知道他们是如何处理这些案件的。

示例:

如果开发人员一次推送4个以下的提交,那么将会在gerrit中创建4个相应的更改,例如1,2,3,4并且它会在jenkins中为所有提交启动4个构建

git log --oneline

e3dfdwd CommitD
5fgfdgh CommitC
df34dsf CommitB
a23sdr3 CommitA 

这里4个提交作为一个整体将通过jenkins的所有测试,但单独他们将失败。现在jenkins构建将失败A,B,C并且将成功为D,因为它将签出A,B,C,因为它们是它的依赖。

在这种情况下,尽管Commit-D成功,但由于其依赖关系未在Jenkins中传递,因此无法合并。

从开发到每次推送而不是每次提交都期望jenkins验证似乎是合理的。但是GerritTrigger只能为每个提交运行。

问题:

有没有办法通知jenkins只为commit-D开始构建,因为它将拥有所有依赖关系C,B,A ?? 或者我们可以从开发而不是提交开始为每个git push构建一个构建吗?

很抱歉,如果我有任何信息

2 个答案:

答案 0 :(得分:1)

我找到了一种只为commit-D开始构建的方法。

我已经介绍了一个gerrittrigger作业,它在每次提交后立即运行,这个作业不会进行任何克隆/构建/验证。

它只会执行一些验证,例如,检查是否需要更改,依赖存在以及依赖于同一分支等

此作业将触发另一项主要工作,仅对通过所有验证的更改执行真正的克隆,结帐更改,构建,验证等。

因此,这将始终为最高提交启动作业,并根据作业结果批准/拒绝所有相关更改。

虽然它没有什么限制,但我们发现这种方法适合我们的工作流程

答案 1 :(得分:0)

大多数公司都不使用git和gerrit :)不幸的是,大多数公司甚至不使用git。而大多数那些做,不使用gerrit。我咨询过几十家公司:两家公司都使用git,而且他们都没有听说过gerrit。

我认为没有可能让gerrit想到推动就好像是在提交。由于推送中的每个提交都可以单独审查和拒绝,因此必须分别考虑和构建每个提交。如果你不希望它以这种方式工作,那么gerrit可能不适合你。

相反,你应该在将它们推送到gerrit之前在本地压缩你的相关提交。这将达到预期的效果。