【问题标题】:How to serialize VSTS CI branch builds如何序列化 VSTS CI 分支构建
【发布时间】:2018-01-01 13:10:44
【问题描述】:

VSTS 允许您通过指定分支模式来选择哪些分支自动触发 CI 构建。

但是,我的单元测试使用的是真实数据库,当多个构建触发时会导致问题,例如master 和 feature-123,因为它们会在数据库测试中发生冲突。

有没有办法指定一次只能运行一个这样的构建;我不想放弃对真实数据库执行测试,因为内存数据库和 SQL Azure 之间存在显着差异。

【问题讨论】:

  • 单元测试使用的是真实数据库。那么它们不是单元测试。单元测试没有外部依赖。您正在描述集成测试
  • 已接受,将它们描述为 低级集成测试 可能更好,因为我试图证明 ORM 映射已正确定义并且我们可以与之交谈正确的数据库服务器,也就是说,如果你没有证明持久层,那么为 API 编写真正的集成测试是没有意义的。

标签: continuous-integration azure-devops


【解决方案1】:

VSTS 已经序列化了由同一个 CI 构建触发的构建。

即使是 CI 构建也可以由多个分支触发,但在一定时间内,默认只有一个构建在运行(除非您使用管道同时运行构建)。

比如master 分支和feature-123 分支同时推送到远程仓库,CI 构建定义将触发两个构建串行(非同时)。


如果您使用管道并且需要连续运行触发的构建,则应确保仅使用一个代理进行 CI 构建。您可以使用以下方式:

在您的 CI 构建定义中 -> 选项选项卡 -> 添加要求以指定要用于 CI 构建的代理。

假设在默认代理池中,代理名称为default1、default2和default3的三个代理。

如果你需要指定default2代理来运行CI构建,那么你可以添加如下需求:

现在即使是同时推送了多个分支,也会一一触发,因为 CI 构建只有一个代理可用。

【讨论】:

  • 这是我遇到问题的多个分支,主分支和功能构建在几秒钟内相互触发。我有多个管道,因为我看不到如何限制这一点,并且仍然并行进行构建/发布。
  • 如果克隆构建定义,一个用于触发master分支,另一个用于单独触发feature-123分支?
  • 没有尝试过,也不想这样做,因为这意味着我必须保持构建定义同步 - 如果同时提交多个功能分支,也无法解决,最好是在发布管道下进行显式控制,您可以在其中指定策略
  • 因此您还可以在构建定义中添加需求,以确保只有一个代理可以运行 CI 构建。我在回答的最后添加了详细步骤,你可以试试。
  • 谢谢,我会试一试
【解决方案2】:

如果您使用 YAML 管道,则可以使用 deployment job 代替常规作业。

通过部署作业,您可以选择要部署到的命名环境。

您可以在 azure devops 中的 Pipelines->Environments 下配置 Environment,您可以选择添加 Exclusive Lock

然后一次只能使用一次运行环境,这会序列化您的运行。

不幸的是,如果您有多个运行在等待环境(因为一个运行当前已将其锁定),则当环境解锁时,只有最新的运行会继续。其他所有等待锁的都将被取消。

【讨论】:

    【解决方案3】:

    如果您想通过 .yml 或 .yaml 文件进行操作,您可以按照以下方式进行操作

    - phase: Build 
      queue: 
        name: <Agent pool name> 
        demands: 
        - agent.name -equals <agent name from agent pool> 
      steps: 
        - task: <taskname> 
          displayName: 'some display name' 
          inputs: 
            value: '<input variable based on type of task' 
            variableName: '<input variable name>'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-28
      • 2018-08-30
      • 1970-01-01
      • 2019-10-13
      • 2018-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多