Azure devops 如何防止在新TFS构建vNext 2015中重复构建

Azure devops 如何防止在新TFS构建vNext 2015中重复构建,azure-devops,tfsbuild,Azure Devops,Tfsbuild,在旧的TFS构建定义(XAML构建)中,如果代码没有更改,我可以选择使团队构建不再构建相同的代码 但是,在新的XML构建(vNext)中,我没有看到这个选项,构建服务器一次又一次地构建代码。如果代码没有被更改,我是否可以实现旧的XAML构建定义中相同的行为,即不再构建代码? 谢谢你的帮助 [更新] 我写了一个powershell脚本来实现Eddie在回答中的建议 Write Debug-消息(“系统URL:+$env:System\u TEAMFOUNDATIONCOLLECTIONURI)

在旧的TFS构建定义(XAML构建)中,如果代码没有更改,我可以选择使团队构建不再构建相同的代码

但是,在新的XML构建(vNext)中,我没有看到这个选项,构建服务器一次又一次地构建代码。如果代码没有被更改,我是否可以实现旧的XAML构建定义中相同的行为,即不再构建代码?

谢谢你的帮助

[更新]

我写了一个powershell脚本来实现Eddie在回答中的建议

Write Debug-消息(“系统URL:+$env:System\u TEAMFOUNDATIONCOLLECTIONURI)
编写调试消息(“团队项目名称:”+$env:SYSTEM\u TEAMPROJECT)
$baseURI=$env:SYSTEM\u TEAMFOUNDATIONCOLLECTIONURI+“DefaultCollection/”+$env:SYSTEM\u TEAMPROJECT+“/\u api/”
$oauth=@{Authorization=“Bearer$env:SYSTEM_ACCESSTOKEN”}
编写调试消息(“基本URL:+$baseURI”)
$BuildDefList=(调用RestMethod-Uri$baseURI/build/definitions?api版本=2.0-Headers$oauth-Method Get)。值|其中{$\名称-类似于“*build”}
写入主机-ForegroundColor青色-对象(“找到”+$BuildDefList.count+“生成定义”)
foreach($BuildDefList中的buildDef)
{   
写入Host-ForegroundColor Yellow-Object(“正在检查生成定义:+$buildDef.name+”…)
$id=$buildDef.id
$build=Invoke RestMethod-Uri$baseURI/build/builds?api version=2.0“&”definitions=$id“&”`$top=1“&”resultFilter=successed-Headers$oauth-Method Get
$changeset=$build.value.sourceVersion
此生成定义中最新生成中使用的变更集为“+$changeset”
$sourceBranch=$build.value.sourceBranch
$latestChangeset=(调用RestMethod-Uri$baseURI/tfvc/changesets?api版本=1.0“&”searchCriteria.itemPath=$sourceBranch“&”`$top=1-标题$oauth-方法Get)。value.changesetId
“需要构建的最新变更集是”+$latestChangeset
if($latestChangeset-和$changeset-lt$latestChangeset)
{
写入Host-ForegroundColor Green-Object(“构建是旧的。正在为“+$buildDef.name+”对新构建进行排队”)
$body=@{Definition=@{Id=$Id}}转换为Json
调用RestMethod-Uri$baseURI/build/builds?api版本=2.0-Body$Body-ContentType“application/json”-Headers$oauth-Method-Post
}
}

在vNext生成定义中没有配置此选项。VSTS用户语音上有多个为此功能提交的功能请求


现在要实现此功能,可以创建另一个生成定义并将其设置为“计划生成”。在构建定义中,只需添加一个powershell脚本任务来比较当前源版本和以前的构建源版本。如果当前版本比构建版本更新,则触发真正的构建定义以通过构建代码。

我添加了根据您的建议编写的powershell脚本。我还有一个相关的问题,我认为在设定了背景的情况下,最好在这里提问。我的问题是:现在我在每个请求的标题中使用我的PAT。因为此脚本由生成定义运行。我想知道是否可以用运行此生成定义的帐户(例如服务帐户)替换我的凭据?我认为有可能其他构建任务(例如tfvc get)无法访问RESTAPI。顺便说一句,我在本地使用VSTS而不是TFS,并且生成代理位于专用计算机上。@LxL在生成定义设置下,选中“选项”选项卡下的“允许脚本访问OAuth令牌”。然后您可以使用构建的oauth令牌访问VST。这里是如何在脚本中使用oauth的链接,以防其他人也像我一样丢失它。如果我需要将此作为新问题发布,请建议我。因此,在脚本正常运行并对新构建进行排队后,我得到了sourceBranch值“$/705194f5-f797-48ed-ad69-1444580e7d24/Dev6.2”的奇怪路径,而不是“$/TotalVision/Dev6.2”。经过进一步调查,我意识到字符串是TotalVision分支的guid。如果我手动对生成进行排队,我将获得sourceBranch“$/TotalVision/Dev6.2”的正确值。这是一个bug还是应该将sourceBranch放在构建请求的主体中以正确获取sourceBranch?我将该项归档在这个bug下