自动 rebase gerrit 更改

ben*_*.la 5 git rebase gerrit jenkins

我当前的开发环境由 Git/Gerrit 设置组成,它运行多个 Jenkins 作业来验证提交的更改。

Gerrit 中的提交类型设置为“仅快进”。

问题”:

  1. 变更 A被推送到 gerrit,触发 Jenkins 上的验证构建
  2. 变更 B被推送到 gerrit,触发 Jenkins 上的验证构建
  3. 变更 A获得“已验证 +1”(来自 Jenkins)
  4. 变更 B获得“已验证 +1”(来自 Jenkins)
  5. 更改 A已提交

(信息:更改 A/B是同一分支上的提交,并且具有相同的父提交 ID)

此时Change B无法再提交,因为它的父级没有指向分支的HEAD。因此,变更 B的开发人员必须手动重新调整其变更的基础。(此变基创建一个新的补丁集,它会自动触发 Jenkins 作业)

我怎样才能摆脱这个手动步骤?

所以我发现我可以将Gerrit项目的提交类型更改为“Rebase if Necessary”(我也可以告诉Gerrit自动解决冲突)。这里的问题是,在变基并解决潜在冲突后,更改会被合并,而无需重新运行 Jenkins 验证作业。无法检测到可能由于变基或冲突解决而引入的潜在错误。

有没有办法在更改过时时自动重新设置更改基础(在示例更改 B中)并重新运行测试?

Mag*_*äck 2

这不可能开箱即用,但您可以编写一个服务来侦听事件(例如,通过stream-events SSH 命令),并在将更改提交到同一分支时重新设置针对特定分支的开放更改的基础。为此编写一个插件应该相当容易,但这显然也会产生更紧密的耦合。

  • 嗯……这实际上不是我想听到的。我认为这个问题应该是一个很常见的问题,我不必编写自定义触发器。 (2认同)