VSTS允许您通过指定分支模式来选择哪些分支自动触发CI构建。
但是,我的单元测试使用的是真正的数据库,当多个构建触发时会导致问题,例如master和feature-123因为它们会在数据库测试中发生冲突。
有没有办法指定一次只能运行一个这样的构建;我不想放弃对真实数据库执行测试,因为内存数据库和SQL Azure之间存在显着差异。
答案 0 :(得分:1)
VSTS已经序列化了由相同CI构建触发的构建。
即使CI构建也可以由多个分支触发,但在一定时间内,默认情况下只运行一个构建(除非您使用管道同时运行构建)。
如果同时将master
分支和feature-123
分支都推送到远程仓库,则CI构建定义将串行(不同时)分割两个构建。
如果您正在使用管道并需要按顺序运行触发的构建,则确保仅使用一个代理来构建CI。您可以使用以下方式:
在您的CI构建定义中 - >选项标签 - >添加需求以指定要用于CI构建的代理。
假设在默认代理程序池中,有三个具有代理名称的代理程序:default1,default2和default3。
如果您需要指定default2代理来运行CI构建,那么您可以按以下方式添加需求:
现在,即使多个分支同时被推送,它们也会被逐个触发,因为只有一个代理可用于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。
然后一次只能运行一个环境,这会序列化您的运行。
不幸的是,如果有多个运行在等待环境(因为一个运行当前已将其锁定),则当环境解锁时,只有最新的运行将继续。所有等待锁定的其他人都将被取消。