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

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

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

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

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

谢谢!

【问题讨论】:

    标签: git azure-devops azure-pipelines azure-pipelines-release-pipeline


    【解决方案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。替换分支策略的克隆版本。

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

    所以工作流程将是:

    1. 创建/更改拉取请求时将触发克隆的构建。
    2. 克隆构建排队成功后,即可完成 PR。
    3. PR 完成后(更改已合并),将触发 CI 构建。
    4. 当 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-02
        • 2013-12-12
        • 1970-01-01
        • 1970-01-01
        • 2016-10-29
        • 2020-03-15
        • 2018-11-15
        • 2019-05-15
        相关资源
        最近更新 更多