【发布时间】:2015-04-03 23:42:38
【问题描述】:
我当前的开发环境包含一个 Git/Gerrit 设置,它运行多个 Jenkins 作业来验证提交的更改。
Gerrit 中的提交类型设置为“Fast-Forward only”。
“问题”:
- 更改 A 被推送到 gerrit,触发 Jenkins 上的验证构建
- 变更 B 被推送到 gerrit,触发 Jenkins 上的验证构建
- 更改 A 获得“已验证 +1”(来自 Jenkins)
- 更改 B 获得“已验证 +1”(来自 Jenkins)
- 更改 A 已提交
(信息:更改 A/B 是同一分支上的提交,并且具有相同的父提交 ID)
此时 Change B 无法再提交,因为它的 parent 不指向分支的 HEAD。因此 Change B 的开发人员必须手动重新调整他的更改。 (这个 rebase 会创建一个新的补丁集,它会自动触发 Jenkins 作业)
我怎样才能摆脱这个手动步骤?
所以我发现我可以将 Gerrit 项目的提交类型更改为“Rebase if Necessary”(我也可以告诉 Gerrit 自动解决冲突)。这里的问题是,在 rebase 和解决潜在冲突之后,更改被合并而无需重新运行 Jenkins 验证作业。无法检测到可能由于变基或解决冲突而引入的潜在错误。
有没有办法自动重新设置更改(在示例 更改 B 中)并在测试过期时重新运行测试?
【问题讨论】:
-
你为什么要检查 自动解决冲突 没有它每个路径冲突都应该手动重新设置基础,这将创建新的补丁集 - 这会生成所需的 jenkins 作业
-
好点,我想我会禁用自动解析,但手动步骤仍然是工作流程的一部分......
-
这就是重点——冲突解决也应该由某人来审查,而不仅仅是代码修改。所以只是不想跳过这一步——也许测试通过了,但用眼睛检查也很好——想想