我们正在使用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构建一个构建吗?
很抱歉,如果我有任何信息
答案 0 :(得分:1)
我找到了一种只为commit-D开始构建的方法。
我已经介绍了一个gerrittrigger作业,它在每次提交后立即运行,这个作业不会进行任何克隆/构建/验证。
它只会执行一些验证,例如,检查是否需要更改,依赖存在以及依赖于同一分支等
此作业将触发另一项主要工作,仅对通过所有验证的更改执行真正的克隆,结帐更改,构建,验证等。
因此,这将始终为最高提交启动作业,并根据作业结果批准/拒绝所有相关更改。
虽然它没有什么限制,但我们发现这种方法适合我们的工作流程
答案 1 :(得分:0)
大多数公司都不使用git和gerrit :)不幸的是,大多数公司甚至不使用git。而大多数那些做,不使用gerrit。我咨询过几十家公司:两家公司都使用git,而且他们都没有听说过gerrit。
我认为没有可能让gerrit想到推动就好像是在提交。由于推送中的每个提交都可以单独审查和拒绝,因此必须分别考虑和构建每个提交。如果你不希望它以这种方式工作,那么gerrit可能不适合你。
相反,你应该在将它们推送到gerrit之前在本地压缩你的相关提交。这将达到预期的效果。