PowerShell Script to Build TFS Definition

1k Views Asked by At

I am trying to create a PS script to create TFS build definition files. I found below example. But, it's not working properly. I tried to follow the example and create a script without any success. Any help in identifying why below script is not working is appreciated and also guidance on how to create a PS script or an example

param(
             [Parameter(Mandatory=$true)]
             [string] $buildName,
        [string] $serverName="http://tfs:80/",
        [string] $teamProject="MyProject"
)

# VS 2010
# $tfsClientVersion = ", Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
# VS 2008
$tfsClientVersion = ", Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"

[void][System.Reflection.Assembly]::Load("Microsoft.TeamFoundation.Client"+$tfsClientVersion)
[void][System.Reflection.Assembly]::Load("Microsoft.TeamFoundation.Build.Client"+$tfsClientVersion)
[void][System.Reflection.Assembly]::Load("Microsoft.TeamFoundation.VersionControl.Client"+$tfsClientVersion)

$tfs = [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]::GetServer($serverName) 
$versionControl = $tfs.GetService([Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer]) 
$buildserver = $tfs.GetService([Microsoft.TeamFoundation.Build.Client.IBuildServer])

$def = $buildserver.CreateBuildDefinition($teamProject)
$def.Name = "$buildName"
$def.Description = "Created by Powershell script "
$agentSpec = $buildServer.CreateBuildAgentSpec($teamProject)
$agentSpec.Name = "build"
$agent = $buildServer.QueryBuildAgents($agentSpec).Agents[0]
$def.DefaultBuildAgent = $agent
$def.DefaultDropLocation = "\\build\PrivateDrops"
$def.RetentionPolicies.Item('Failed').NumberToKeep = 5
$def.RetentionPolicies.Item('Stopped').NumberToKeep = 0 #None
$def.RetentionPolicies.Item('PartiallySucceeded').NumberToKeep = 5
$def.RetentionPolicies.Item('Succeeded').NumberToKeep = 5
$def.Save()
1

There are 1 best solutions below

3
On

You seem to try to create build definition on tfs 2010 using 2008 assembly and aproach, without provided outputs or errors is hard to tell exact issue, but few thing stand out:

  • use the version of assemblies that match your tfs server (as you tagged question tfs2010)
  • For 2010 suggested way have to work with api is to create TfsTeamProjectCollection object from uri, from there you will use get service as you do now.
  • Your code suggest is for 2008, there have been major changes how tfs builds work in 2010, specificly DefaultBuildAgent property is obsolete and unused, agents are assigned by build controller use following as reference for your script.

http://geekswithblogs.net/jakob/archive/2010/04/26/creating-a-build-definition-using-the-tfs-2010-api.aspx