2016-07-04 86 views
1

在旧的TFS构建定义(XAML构建)中,如果代码未更改,我可以选择让Team Build不再构建相同的代码。 XAML Build Definition如何防止在新的TFS构建过程中重复构建vNext 2015

但是,在新的XML Build(vNext)中,我没有看到这个选项,并且构建服务器一次又一次地构建代码。有没有什么办法可以达到我们在旧XAML构建定义中所做的相同行为,即如果它没有被更改,则不再构建代码? xml build

感谢您的帮助...

[UPDATE]

我写了一个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 
    } 
} 

回答

3

有不能在vNext构建定义中配置此选项。在VSTS用户语音上提交了此功能的几项功能请求。

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触发实际构建定义以构建代码。

+0

我添加了我写你的建议powershell脚本。我也有相关的问题,我认为在给定背景的情况下最好问这里。我的问题是:现在我在每个请求的标题中使用我的PAT。由于此脚本是由构建定义运行的。我想知道是否可以用运行此构建定义的帐户(例如服务帐户)来替换我的凭证?我认为这是可能的,否则其他构建任务(例如tfvc get)将无法访问REST API。顺便说一句,我使用的VSTS不是TFS的前提下,并且构建代理是在专用机器上。 – LxL

+0

@LxL在构建定义设置下,选中“选项”选项卡下的“允许脚本访问OAuth标记”。然后,您可以使用构建的oauth令牌访问VSTS。 –

+0

这里是如何在脚本中使用OAuth的链接,以防其他人也像我一样丢失https://www.visualstudio.com/docs/build/scripts/index#oauth – LxL