VSTS 发布拉取请求构建触发器

Posted

技术标签:

【中文标题】VSTS 发布拉取请求构建触发器【英文标题】:VSTS release pull request build trigger 【发布时间】:2017-08-02 19:36:41 【问题描述】:

我的团队正在使用 VSTS Build & Release 机制,结合拉取请求分支安全设置,这样代码只能在拉取请求完成时才被合并。

虽然我们遇到了一些奇怪的事情,因为当创建拉取请求(并生成构建以证明提交)时 - 由拉取请求触发的此构建的完成也间接触发了发布,因为我们有一个释放触发器设置。

这本身可能没问题,但是在“完成”拉取请求时也会发生另一个构建和发布周期!

有没有办法让 VSTS 发布触发器仅在拉取请求完成并合并到发布分支时才启动?

谢谢!

【问题讨论】:

【参考方案1】:

我们可以在发布触发器上指定一个分支过滤器,这样只有 master 的构建才会触发发布。 PR 验证构建在不同的分支中完成。获得批准并将分支合并到 master 后,这就是您要触发发布的构建。

令人讨厌的是,他们一直在移动东西。在撰写本文时,在编辑发布时,在 Pipeline 下的 Artifacts 下,在工件上,有一个内部带有闪电的圆圈,工具提示显示“Continuous deployment trigger” - 单击它。在右侧,如果启用了触发器,您将看到“构建分支过滤器”。单击“+ 添加”并选择主分支。保存发布定义。

对于执行不同操作的构建,我们现在可以为任务设置条件,以便您可以让任务仅在 PR 验证构建或仅在主构建上运行。

https://docs.microsoft.com/en-us/vsts/build-release/concepts/process/conditions

【讨论】:

这是我认为最优雅最正确的答案 如果您想在 PR 合并到开发分支时发布库的 alpha 版本怎么办?在这种情况下,您希望那些发布在分支策略中的条件都已满足(评论解析、构建等)并且 PR 最终完成时发生,是吗?跨度> 【参考方案2】:

您只需要克隆您当前的构建定义并禁用 CI 构建,然后使用克隆的构建来验证创建的 PR。

首先,更改以下设置:

1.克隆构建。

点击CI构建的...按钮->克隆->编辑克隆的构建定义->禁用CI构建->保存。

2。替换分支策略的克隆版本。

打开分支策略 -> 编辑构建验证策略 -> 选择克隆的构建定义 -> 保存。

所以工作流程将是:

    创建/更改拉取请求时将触发克隆的构建。 克隆构建排队成功后,即可完成 PR。 PR 完成后(更改已合并),将触发 CI 构建。 当 CI 构建排队成功时,将触发 CD 发布。

现在,只有 PR 完成并合并到release 分支,才会触发发布定义。

【讨论】:

这个解决方案肯定会起作用,但它不像我想要的那样优雅。这里有两个问题 - 首先我们创建了一个构建副本,它更难维护。其次,门控构建可能有一些根本不需要再次运行的步骤,例如 lint 和测试(因为它们刚刚在相同的代码上成功运行)。但是分离工件创建还需要再次从门控构建中运行一些构建步骤。我的问题是 - 你能提供一个解决方案,在门控和 CI 构建之间没有任务重复吗? 如果有人在没有拉取请求的情况下在主分支上运行 CI 构建怎么办?它也会触发 CD 发布管道!!?【参考方案3】:

使用 Build 任务的条件语句来验证 Build.Reason 是否为“Pull Request”。

转到您的任务>展开“控制选项”>“运行此任务”>在此选择“自定义条件”

在自定义条件中指定以下条件以过滤掉 PullRequest 构建 and(succeeded(), ne(variables['Build.Reason'], 'PullRequest'))

【讨论】:

【参考方案4】:

如果您选中了启用持续集成框(在触发器选项卡下),那么它将在 PR 完成后排队另一个构建。我还没有尝试过,但是您可以尝试使用手动触发器(通过分支策略)添加另一个构建定义,但检查那个 CI 框...

图片来源:https://www.youtube.com/watch?v=uGAcWLnSU0A&t=582s

【讨论】:

以上是关于VSTS 发布拉取请求构建触发器的主要内容,如果未能解决你的问题,请参考以下文章

VSTS:无法添加触发发布的构建标签

VSTS:如何使用 REST API 获取由构建触发的发布 ID

VSTS 当另一个项目签入时,我们如何触发一个项目的自动构建

如何检索在 VSTS 中触发构建时使用的构建参数(使用 REST API)?

VSTS 发布自动部署完成失败警报

bitbucket 上的拉取请求不会触发竹子上的构建