如何防止在新的 TFS build vNext 2015 中重复构建

How to prevent building repeated in new TFS build vNext 2015

在旧的 TFS 构建定义(XAML 构建)中,如果代码未更改,我可以选择让 Team Build 不再构建相同的代码。

但是,在新的 XML 构建 (vNext) 中,我没有看到此选项,并且构建服务器不断地构建代码。有没有什么方法可以实现与旧 XAML 构建定义中相同的行为,如果代码没有更改就不再构建代码?

感谢您的帮助...

[更新]

我写了一个 powershell 脚本来实现埃迪在答案中建议的内容

Write-Debug -Message ("System URL: "+$env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)
Write-Debug -Message ("Team Project Name: "+$env:SYSTEM_TEAMPROJECT)
$baseURI=$env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI+"DefaultCollection/"+$env:SYSTEM_TEAMPROJECT+"/_apis/"
$oauth= @{Authorization="Bearer $env:SYSTEM_ACCESSTOKEN"}
Write-Debug -Message ("Base URL: "+$baseURI)
$BuildDefList=(Invoke-RestMethod -Uri $baseURI/build/definitions?api-version=2.0 -Headers $oauth -Method Get).value | where {$_.name -like "*Build"}

Write-Host -ForegroundColor Cyan -Object ("Found "+$BuildDefList.count+" build definition(s)")

foreach ($buildDef in $BuildDefList)
{   
    Write-Host -ForegroundColor Yellow -Object ("Checking Build Definition: "+$buildDef.name+" ...")
    $id=$buildDef.id
    $build= Invoke-RestMethod -Uri $baseURI/build/builds?api-version=2.0"&"definitions=$id"&"`$top=1"&"resultFilter=succeeded -Headers $oauth -Method Get
    $changeset= $build.value.sourceVersion
    "The changeset used in the lastest build in this build definition is "+$changeset

    $sourceBranch=$build.value.sourceBranch
    $latestChangeset=(Invoke-RestMethod -Uri $baseURI/tfvc/changesets?api-version=1.0"&"searchCriteria.itemPath=$sourceBranch"&"`$top=1 -Headers $oauth -Method Get).value.changesetId   
    "The latest changset need to build is "+$latestChangeset

    if($latestChangeset -and $changeset -lt $latestChangeset)
    {
        Write-Host -ForegroundColor Green -Object ("The build is old. Queuing new build for "+$buildDef.name+" now")
        $body= @{Definition = @{ Id=$id}} | ConvertTo-Json
        Invoke-RestMethod -Uri $baseURI/build/builds?api-version=2.0 -Body $body -ContentType "application/json" -Headers $oauth -Method Post
    }
}

在 vNext 构建定义中没有配置此选项的选项。在 VSTS User Voice 上针对此功能提交了多个功能请求。

Add an vNext option to build only if something has changed to scheduled build trigger

TFBuild 2015: Run sheduled build only when source has changed

要暂时实现此功能,您可以创建另一个构建定义并将其设置为计划构建。在构建定义中,只需添加一个 power-shell 脚本任务来比较当前源版本和以前的构建源版本。如果当前版本比内置版本新,则触发真正的构建定义以通过 Rest API.

构建代码