【发布时间】:2020-09-11 10:41:47
【问题描述】:
我们目前有以下分支策略:
开发 > 发布 > 大师
Devs 从 Develop 创建一个本地分支,将更改合并到 develop。我们的开发环境建立在该分支之上。当他们想要测试他们的更改时,他们会推送到 QA 环境,该环境也使用 Develop 分支。这个循环一直持续到迭代的功能测试完成。此时,代码将合并到 Release 分支中,并通过 staging 部署,然后部署到 prod。在部署到 prod 之后,代码应该合并到 Master,但它经常被遗忘。这会在小众场景中造成问题。
有没有办法使用 devops 管道有条件地自动提高 PR?所以我认为这需要 2 个 PR:
- 成功发布到 prod 后,为 Master 分支提出了 PR。这里的想法是,一旦获得批准,团队中的某个人就可以批准。
- 为 Develop 分支提出 PR 如果第一个 PR 获得批准 并且现在 Master 中的代码与 Develop 不同。在很多情况下,它不需要 PR。
我一直在谷歌上搜索并找到了 api 方法 like this 但我看不出你如何将它放入管道中并使其成为条件。
其他信息:
我的理解是构建定义需要知道根据下图构建哪个分支。因此,每个 sprint 创建一个新的发布分支要么导致每次都必须更新构建定义,要么创建一个新的构建定义,在大多数情况下,这基本上是一个完整的副本,除了分支名称。除非我误会了,我认为我是。
【问题讨论】:
-
你为什么不做其他人都做的理智的事情:在发布完成后将
release合并回master? -
@IanKemp - 我希望它值得信任,但我们有多个团队,有时会错过它。这最终导致需要通过发布分支发布修补程序的复杂情况,而计划中的更改已经在发布分支中。在这种情况下,应该能够从 Master 中获取副本,但由于它没有被合并,因此无法完成。
-
等等,你只有一个 single 永生的
release分支吗?这违背了整个目的。在每个新的 sprint 开始时从master创建一个新的release-<version>分支(即它将包含前一个 sprint 的工作),将在 sprint 期间出现的任何需要用于该版本的修补程序放在那里,并且在冲刺结束时将其合并回master- 然后清洗,冲洗,重复。您可以轻松地编写start-new-sprint来自动执行此操作。 -
我想说的是,这个问题看起来像是一个 X-Y 问题:你遇到了人们忘记合并代码的问题,你正试图找到一个自动化的解决方案来提醒他们去做所以。这样的解决方案将不简单,易碎,并且需要维护。根据经验,您的真正问题似乎是一个复杂的分支策略,它允许事情从裂缝中消失,和/或开发人员缺乏合并纪律。这些是完全不同的问题,试图用代码解决它们是子弹伤口上的创可贴。
-
@sr28 您不需要对构建定义进行任何更新。在哪个分支上运行不是构建定义的一部分,而只是它的运行时资源。您可以参考这个 REST API Runs - Run Pipeline。您可以使用参数
resources指定管道将在哪个分支上运行而不更新管道。
标签: azure-devops