使用Azure DevOps,如何在启动新版本时取消当前版本?
我想节省构建时间。有时,在我的master分支上进行合并,然后由另一个开发人员进行一次合并,然后由另一个开发人员再次进行一次合并。我不需要逐个构建。我只能保留最新版本。因此,当一个新的构建排队时,它可以取消所有以前的构建。
是否可以设置他的构建定义?
答案 0 :(得分:0)
Azure DevOps中没有此类功能。
最接近使用“批处理CI构建”的操作-运行构建时,系统等待构建完成,然后将尚未构建的所有更改的另一个构建排队。
要在yaml构建中启用它,请将其添加到trigger
部分:
batch: true
在calssic编辑器中,转到“触发器”选项卡,并选中“正在进行构建时批处理更改”复选框。
编辑:
您可以在构建开始时运行PowerShell脚本,以从相同的定义中取消正在运行的构建:
$header = @{ Authorization = "Bearer $env:System_AccessToken" }
$buildsUrl = "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/builds/builds"
$builds = Invoke-RestMethod -Uri $url -Method Get -Header $header
$buildsToStop = $builds.value.Where({ ($.status -eq 'inProgress') -and ($_.definition.name -eq $(Build.DefinitionName)) -and ($_.id -ne $(Build.BuildId)) })
ForEach($build in $buildsToStop)
{
$build.status = "Cancelling"
$body = $build | ConvertTo-Json -Depth 10
$urlToCancel = "$(System.TeamFoundationCollectionUri)$(System.TeamProject)/_apis/build/builds/$(builds.id)"
Invoke-RestMethod -Uri $urlToCancel -Method Patch -ContentType application/json -Body $body -Header $header
}
我使用OAuth令牌进行授权(在工作选项中启用它),并使用内联脚本($(varName)
而非$env:varName
)。
现在,如果您有一个正在运行的构建,而其他人触发了另一个开始运行的构建,则在此步骤中,第一个构建将被取消。
答案 1 :(得分:0)
在您的特定用例(构建主分支)中,batch the jobs似乎更好。通常,您不想在中间停止master build。
我来这里是在寻找一种新提交时取消分支构建的方法。最终,我发现您可以使用PR构建,而Github webhook会自动取消它。 PR是默认的并且是自动的,因此您只需要停止建立分支机构即可。
# will not build any branch, only PRs because PR are canceled
# automatically after new commit is pushed
trigger: none