如何序列化VSTS CI分支构建

时间:2018-01-01 13:10:44

标签: continuous-integration azure-devops

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

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

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

3 个答案:

答案 0 :(得分:1)

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

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

如果同时将master分支和feature-123分支都推送到远程仓库,则CI构建定义将串行(不同时)分割两个构建。

如果您正在使用管道并需要按顺序运行触发的构建,则确保仅使用一个代理来构建CI。您可以使用以下方式:

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

假设在默认代理程序池中,有三个具有代理名称的代理程序:default1,default2和default3。

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

enter image description here

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

答案 1 :(得分:0)

如果您想通过.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>'

答案 2 :(得分:0)

如果使用YAML管道,则可以使用minimal, reproducible example代替常规作业。

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

您可以在Pipelines-> Environments下的azure devops中配置Environment,并且可以选择添加deployment job

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

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