VSTS允许您通过指定分支模式来选择哪些分支自动触发CI构建。
但是,我的单元测试使用的是真正的数据库,当多个构建触发时会导致问题。 master和feature-123因为它们会在数据库测试中发生冲突。
有没有办法指定只应该运行一个这样的构建;我不想放弃对真实数据库执行测试,因为内存数据库和SQL Azure之间存在显着差异。
VSTS已经序列化了由相同CI构建触发的构建。
甚至CI构建也可以由多个分支触发,但是在一定时间内,默认情况下只运行一个构建(除非您使用管道同时运行构建)。
例如,如果master
分支和feature-123
分支在当时被推送到远程仓库,CI构建定义将串行地(不同时)分成两个构建。
如果您正在使用管道并且需要串行运行触发的构建,则应确保只有一个代理用于CI构建。您可以使用以下方式:
在CI构建定义 - >选项选项卡 - >添加需求以指定要用于CI构建的代理。
假设在默认代理程序池中,有三个代理程序名称的代理程序:default1,default2和default3。
如果需要指定default2代理来运行CI构建,则可以按如下方式添加需求:
现在,即使多个分支同时被推送,它们也将被逐个触发,因为只有一个代理可用于CI构建。
如果你想通过.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>'