When you do a tfs delete on a build definition and you receive a timeout, you probably have to many builds in your TFS server. Even if you delete all the build for your build definition, tfs still stores all the builds in your TFS Server. Just like your TFS Team projects, you have to delete and then destroy the builds. After that, you could delete the build definition completely.
The only way to do this is, is to delete and destroy the builds in pieces. You can only do that by the command prompt.
I created a PowerShell script that loops through the builds for a specific build definition and deletes all the builds before a specific date. So if your build is maybe a year old, you could start the script a year back from now and loop through all the builds until let’s say two months ago. You could skip the number of days you want. I set the days to skip to 15 because I have a lot of builds each month and otherwise the TFS server has trouble to delete the bigger chunks.
$TfsCollectionUrl = "http://YourTfsServer:8080/tfs/YourTeamCollection" $teamProject = "YourTeamProject" $BuildDefinition = "YourTeamBuildDefinitionName" Function CountForward { Param([datetime]$startDate,[int]$daysToSkip,[datetime]$endDate) Write-Host "Count forward from:" $startDate.ToString("yyyy-MM-dd") -foregroundcolor "magenta" Write-Host "Count forward until:" $endDate.ToString("yyyy-MM-dd")-foregroundcolor "magenta" Write-Host "Count every" $daysToSkip "day(s)" -foregroundcolor "magenta" while ($startDate -le $endDate) { $BuildDefinitionFull = $teamProject + "\" + $BuildDefinition $dateToQuery = $startDate.ToString("yyyy-MM-dd") Write-Host "Delete and destroy Builds before" $startDate.ToString("yyyy-MM-dd") "for build definition" $BuildDefinitionFull -foregroundcolor "magenta" tfsbuild.exe delete /server:$TfsCollectionUrl /builddefinition:"$BuildDefinitionFull" /daterange:~$dateToQuery /deleteoptions:All /noprompt /silent tfsbuild.exe destroy /server:$TfsCollectionUrl /builddefinition:"$BuildDefinitionFull" /daterange:~$dateToQuery /noprompt /silent $startDate = $startDate.AddDays($daysToSkip) } } CountForward -startDate (get-Date).AddDays(-300) -daysToSkip 15 -endDate (get-Date).AddDays(-60)
Save the PowerShell file as “DeleteBuildDefinition.ps1” and execute it in your Visual Studio command prompt. You can execute the PowerShell file in your VS command prompt with the following command:
PowerShell -Command "& {D:\DeleteBuildDefinition.ps1}"
tfs delete build definition timeout